使用cx_Oracle读取长RAW数据

2 投票
1 回答
2069 浏览
提问于 2025-04-16 10:18

我有一个老旧的数据库,里面有一些叫做LONG RAW的列。这些列存储的数据大约有100KB。

我正在尝试用cx_Oracle来访问这些二进制数据。

虽然可以成功访问,但我发现我最多只能提取到约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列的新表。但我无法这样做,因为我已经有很多数据是这个格式的……

有没有什么好主意?

1 个回答

0

你可以创建一个全局临时表,这个表里有一个 BLOB 列。然后在获取 LONG RAW 值之前,使用 TO_LOB 转换函数把它插入到这个临时表里。之后,你就可以从临时表中选择 BLOB 值了。

撰写回答