Ang*_*gus 2 oracle select blob
我希望只提取存储的 blob 的前 1024 个字节,而不是整个文件。这样做的原因是我只想尽快从文件中提取元数据,而不必选择整个 blob。
我明白以下几点:
select dbms_lob.substr(file_blob, 16,1)
from file_upload
where file_upload_id=504;
Run Code Online (Sandbox Code Playgroud)
它以十六进制形式返回。我该怎么做才能在不选择整个 blob 的情况下以二进制数据形式返回它?
提前致谢。
对于 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;
Run Code Online (Sandbox Code Playgroud)
这将以十进制(例如 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |