Oracle数据库:如何读取BLOB?

| 我正在使用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中获取文本内容”与“ 3”文档结合起来,以获得更复杂的方法,使您可以查看BLOB的子字符串。     
SQL Developer可以将blob显示为图像(至少适用于jpeg)。在“数据”视图中,双击“ BLOB”字段以获取“铅笔”图标。单击铅笔,将出现一个对话框,您可以选择一个“查看为图像”复选框。     
如果内容不是太大,也可以使用
SELECT CAST ( <blobfield> AS RAW( <maxFieldLength> ) ) FROM <table>;
要么
SELECT DUMP ( CAST ( <blobfield> AS RAW( <maxFieldLength> ) ) ) FROM <table>;
这将显示十六进制值。     
如果使用Oracle本机数据提供程序而不是Microsoft驱动程序,则可以获取所有字段类型
Dim cn As New Oracle.DataAccess.Client.OracleConnection
Dim cm As New Oracle.DataAccess.Client.OracleCommand
Dim dr As Oracle.DataAccess.Client.OracleDataReader
连接字符串不需要Provider值,因此您可以使用类似以下内容:
\"Data Source=myOracle;UserID=Me;Password=secret\"
打开连接:
cn.ConnectionString = \"Data Source=myOracle;UserID=Me;Password=secret\"
cn.Open()
附加命令并设置Sql语句
cm.Connection = cn
cm.CommandText = strCommand
设置提取大小。我使用4000,因为它与varchar一样大
cm.InitialLONGFetchSize = 4000
启动阅读器并遍历记录/列
dr = cm.ExecuteReader

Do while dr.read()
    strMyLongString = dr(i)
Loop
如果您首先在列中识别数据类型,则可以通过读取来更具体,例如dr.GetOracleString(i)dr.GetOracleClob(i)等。如果您正在读取LONG数据类型,则简单的
dr(i)
dr.GetOracleString(i)
可以正常工作。关键是要确保InitialLONGFetchSize对于数据类型而言足够大。还要注意,本机驱动程序不支持数据读取器的“ 14”,但是您不需要它,而且LONG字段甚至不必是select语句中的最后一个字段。     
您使用什么客户? .Net,Java,Ruby,SQLPLUS,SQL DEVELOPER?您在哪里编写了这个简单的select语句? 以及为什么要读取Blob的内容,Blob包含二进制数据,因此数据不可读。如果要存储文本而不是二进制内容,则应使用clob而不是blob。 我建议您下载SQL DEVELOPER:http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html。使用SQL DEVELOPER,您可以看到内容。     
如果您想从ѭ15中获取纯文本(正文部分),则可以使用CTX_DOC软件包。 例如,“ 16”过程可以“生成文档的纯文本或HTML版本”。请注意,“ 16”需要在“ 15”列上有一个索引。如果您不希望这样做,则可以改用
CTX_DOC.POLICY_FILTER
过程,该过程不需要索引。     

要回复问题请先登录注册