我正在编写一个报告工具(Pentaho Report Designer)的查询,我需要检索一些存储在Oracle 11数据库中的jpgs.诀窍是慢跑(存储为BLOB)包括我需要删除的12字节头(由另一个应用程序添加).报告工具还要求将数据作为RAW数据返回.
我遇到的问题似乎是我找到的用于操作BLOB的函数/过程都对它们有严格的大小/长度限制.
使用DBMS_LOB.SUBSTR(dbfile.filedata,2000,12),此查询与我可以获得的工作一样接近:
select DBMS_LOB.SUBSTR(dbfile.filedata,2000,12) as filedata
from bms_0002005_251 safety
inner join bms_9999999_100 file02 on safety.bms_id = file02.bms_fk_0002005_839_ID
inner join bms_9999999_104 inc on safety.bms_fk_0002005_844_id = inc.bms_id
left join bms_dbfiles dbfile on file02.bms_9999999_40 = dbfile.uniqueid
对于图像< = 2000字节,这完美地工作,剥离12字节头并返回原始数据,如
FFD8FFE000104A464946000102010
select DBMS_LOB.SUBSTR(dbfile.filedata,2000,12) as filedata
from bms_0002005_251 safety
inner join bms_9999999_100 file02 on safety.bms_id = file02.bms_fk_0002005_839_ID
inner join bms_9999999_104 inc on safety.bms_fk_0002005_844_id = inc.bms_id
left join bms_dbfiles dbfile on file02.bms_9999999_40 = dbfile.uniqueid
600000FFEE000E41646F626500640000000001 ……等
但是对于较大的图像(大多数图像)2000是不够的,但是一旦我将子字符串长度增加到2001,查询就会失败:
ORA-06502: PL/SQL: numeric or value error: raw variable length too
long ORA-06512: at line 1
06502. 00000 – “PL/SQL: numeric or value error%s”
这是我最接近的,但长话短说 – 在单个查询中是否有任何方法我可以从大型BLOB中删除前12个字节并将数据作为RAW返回?