2011-01-20 65 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 2011-01-21 14:35:57

回答

0

您可以使用BLOB列創建全局臨時表,然後在獲取LONG RAW值之前使用TO_LOB轉換函數將其插入到此表中。然後,您可以從臨時表中選擇BLOB值。

相關問題