从甲骨文首先读取1kb的blob

时间:2010-05-10 04:22:14

标签: oracle select blob

我希望只提取存储的blob的前1024个字节,而不是整个文件。原因是我想尽可能快地从文件中提取元数据,而不必选择整个blob。

我理解以下内容:

select dbms_lob.substr(file_blob, 16,1) 
from file_upload 
where file_upload_id=504;

以十六进制形式返回。我怎么能这样做,所以它在二进制数据中返回它而不选择整个blob?

提前致谢。

1 个答案:

答案 0 :(得分:4)

对于BLOB,DBMS_LOB.SUBSTR将返回RAW。大多数环境将以十六进制呈现。 您可以使用DUMP功能以其他一些格式查看它。

select dump(dbms_lob.substr(product_image,10,1),10), 
       dump(dbms_lob.substr(product_image,10,1),16), 
       dump(dbms_lob.substr(product_image,10,1),17) 
from APEX_DEMO.DEMO_PRODUCT_INFO
where product_id = 9;

以十进制(例如0-255),十六进制和字符形式返回BLOB的前10个字节。后者可能会向屏幕抛出一些不可打印的垃圾,如果客户端和数据库字符集不匹配,则会进行一些“翻译”。

您可以使用UTL_RAW.CAST_TO_VARCHAR2,它可以为您提供所需的内容。

select utl_raw.cast_to_varchar2(dbms_lob.substr(product_image,10,1)) chr 
from APEX_DEMO.DEMO_PRODUCT_INFO
where product_id = 9