2011-01-20 9 views
2

LONG RAW列を持つ従来のデータベースがあります。この列に格納されるデータは約100KBです。 私はこれらのバイナリデータにcx_Oracleでアクセスしようとしています。cx_OracleでLONG RAWを読み取る

私が抽出できる最大サイズは〜41KBです!ここで

は(http://dbaportal.eu/?q=node/147から)私のコードです

cursor = db.cursor()  
cursor.arraysize = 1 
cursor.setoutputsize(1200000000) 

cursor.execute("select data from mytable") 
print cursor.description 
for row in cursor: 
    data = row[0] 
    f = open("/tmp/data",'wb') 
    f.write(data) 
    f.close() 
    # Only first line 
    break 

出力は次のようである:

$ python oracle.py 
[('GRIB', <type 'cx_Oracle.LONG_BINARY'>, -1, 0, 0, 0, 1)] 
$ ls -lh /tmp/data 
41186 2011-01-20 12:42 /tmp/pygrib 

私はLONG RAWが対処することは容易ではありません知っています。いくつかのメソッドは、BLOBカラムを持つ新しいテーブルを再作成するよう指示します。しかし、私はすでにこの形式のデータのギガを持っているので、私はそれを買う余裕がありません...

何か考えですか?

+0

私は好奇心 - なぜこの 'cursor.setoutputsize(1200000000)'?リンクされたコードでは違うのが分かります。 – Tshepang

+0

デフォルト値では機能しませんでしたので、値を増やそうとしました... –

+0

'dbms_lob'でオンザフライで' blob'に変換しましたか? – Ben

答えて

0

BLOB列を持つグローバル一時表を作成してから、LONG RAW値をTO_LOB変換関数を使用してこの表に挿入する直前に作成できます。次に、テンポラリテーブルからBLOBの値を選択できます。

関連する問題