如何从ORACLE 11.2g中提取存储在LONG / CLOB数据类型中的图像?

时间:2019-02-16 10:29:44

标签: python oracle clob

我有一个从2006年开始的非常旧的oracle数据库转储,其中的图像存储在LONG数据类型中。似乎二进制数据存储在字符类型列中。如何将这些图像导出到.jpeg文件?

我已将数据库还原到Oracle 11.2g。除图像外,其他所有功能均正常运行。我创建了一个新表以使用CLOB代替LONG数据类型,并将一条记录移到该表,因为更改表以使用CLOB失败,并出现错误SQL错误:ORA-00997:非法使用LONG数据类型。

CREATE TABLE image_table_NEW AS SELECT TO_LOB(sign_area) \
sign_area FROM image_table where rownum=1;

然后使用python读取数据,

import cx_Oracle
sql = 'select SIGN_AREA from xxx.image_table_NEW where rownum<2'
imagePath = '/home/amrutraj/Desktop/image.jpeg'
conn = cx_Oracle.connect('username/password@//IP:port/sid')
cursor = conn.cursor()
cursor.execute(sql)
row = cursor.fetchone()
strBlob=row[0].read()
imageFile = open(imagePath,'wb') # also tried with just w
imageFile.write(strBlob)
imageFile.close()
cursor.close()
conn.close()

生成了一个名为image.jpeg的文件,但它不可读。其给出错误“错误解释JPEG图像文件(不是JPEG文件:以0x3f 0x3f开头)”

以上代码与BLOB数据类型列完美配合。

编辑: 源数据库字符集:UNKNOWN 数据库字符集:AL32UTF8

编辑2:(2019年2月17日) 我尝试在sqldeveloper中使用此脚本https://oracle-base.com/dba/script?category=miscellaneous&file=clob_to_blob.sql使用DBMS_LOB.converttoblob,但始终收到错误'06502。 00000-“ PL / SQL:数字或值错误%s””。

SCREENSHOT OF THE CLOB DATA

0 个答案:

没有答案