我正在使用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的最大字符串长度.如果您需要处理这种情况,您必须结合使用如何从Oracle SQL中的BLOB获取文本内容和更复杂方法的文档,DMBS_LOB.SUBSTR以便查看BLOB的子字符串.
你用什么客户端?.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您可以看到内容。
| 归档时间: | 
 | 
| 查看次数: | 118580 次 | 
| 最近记录: |