我希望只提取存储的blob的前1024个字节,而不是整个文件。原因是我想尽可能快地从文件中提取元数据,而不必选择整个blob。
我理解以下内容:
select dbms_lob.substr(file_blob, 16,1)
from file_upload
where file_upload_id=504;
以十六进制形式返回。我怎么能这样做,所以它在二进制数据中返回它而不选择整个blob?
提前致谢。
答案 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