Oracle数据库:如何读取BLOB?

ktm*_*124 12 sql oracle blob

我正在使用Oracle数据库,我想阅读BLOB的内容.我该怎么做呢?

当我做一个简单的select语句时,它只返回"(BLOB)"(没有引号).我如何阅读实际内容?

and*_*otn 9

您可以使用十六进制转储值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
Run Code Online (Sandbox Code Playgroud)

这很方便,因为您使用的是与插入BLOB列相同的格式:

CREATE GLOBAL TEMPORARY TABLE foo (
    b BLOB);
INSERT INTO foo VALUES ('1f8b080087cdc1520003f348cdc9c9d75128cf2fca49d1e30200d7bbcdfc0e000000');

DESC foo;
-- Name Null Type 
-- ---- ---- ---- 
-- B        BLOB 
Run Code Online (Sandbox Code Playgroud)

但是,在某一点(2000字节?),相应的十六进制字符串超过了Oracle的最大字符串长度.如果您需要处理这种情况,您必须结合使用如何从Oracle SQL中的BLOB获取文本内容和更复杂方法的文档,DMBS_LOB.SUBSTR以便查看BLOB的子字符串.


小智 7

SQL Developer可以将blob显示为图像(至少它适用于jpegs).在数据视图中,双击BLOB字段以获取"铅笔"图标.单击铅笔以获得一个对话框,允许您选择"查看为图像"复选框.


TTT*_*TTT 0

你用什么客户端?.Net、Java、Ruby、SQLPLUS、SQL 开发人员?你在哪里写了这个简单的 select 语句?

还有为什么要读取blob的内容,blob包含二进制数据,这样数据是不可读的。如果您想存储文本而不是二进制内容,则应该使用 clob 而不是 blob。

我建议您下载SQL DEVELOPER:http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html。使用SQL DEVELOPER您可以看到内容。