我正在使用 Oracle 数据库,我想读取 BLOB 的内容。我该怎么做?
当我执行一个简单的 select 语句时,它只返回“(BLOB)”(不带引号)。我如何阅读实际内容?
最佳答案
您可以使用 UTL_RAW.CAST_TO_RAW(UTL_RAW.CAST_TO_VARCHAR2())
转储十六进制值.
SELECT b FROM foo;
-- (BLOB)
SELECT UTL_RAW.CAST_TO_RAW(UTL_RAW.CAST_TO_VARCHAR2(b))
FROM foo;
-- 1F8B080087CDC1520003F348CDC9C9D75128CF2FCA49D1E30200D7BBCDFC0E000000
这很方便,因为这与用于插入 BLOB 列的格式相同:
CREATE GLOBAL TEMPORARY TABLE foo (
b BLOB);
INSERT INTO foo VALUES ('1f8b080087cdc1520003f348cdc9c9d75128cf2fca49d1e30200d7bbcdfc0e000000');
DESC foo;
-- Name Null Type
-- ---- ---- ----
-- B BLOB
然而,在某个点(2000 字节?)对应的十六进制字符串超过了 Oracle 的最大字符串长度。如果你需要处理这种情况,你必须结合 How do I get textual contents from BLOB in Oracle SQL与 documentation for
DMBS_LOB.SUBSTR
对于更复杂的方法,您可以查看 BLOB 的子字符串。
关于sql - Oracle 数据库 : How to read a BLOB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682387/