我试图从SQL控制台中看到Oracle BLOB中的内容.
我知道它包含一些有点大的文本,我想只看到文本,但是下面的查询只表明该字段中有一个BLOB:
select BLOB_FIELD from TABLE_WITH_BLOB where ID = '<row id>';
Run Code Online (Sandbox Code Playgroud)
我得到的结果并不完全符合我的预期:
BLOB_FIELD
-----------------------
oracle.sql.BLOB@1c4ada9
那么我可以做什么样的神奇咒语来将BLOB变成它的文本表示?
PS:我只是试图从SQL控制台(Eclipse Data Tools)查看BLOB的内容,而不是在代码中使用它.
Mac*_*Mac 134
首先,您可能希望将文本存储在CLOB/NCLOB列而不是BLOB中,BLOB是专为二进制数据设计的(顺便提一下,您的查询将与CLOB一起使用).
如果所有字符集都兼容(存储在BLOB中的文本的原始CS,用于VARCHAR2的数据库的CS),以下查询将允许您查看blob内部文本的第一个32767个字符(最多):
select utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_FIELD)) from TABLE_WITH_BLOB where ID = '<row id>';
Run Code Online (Sandbox Code Playgroud)
小智 14
您可以使用以下SQL从表中读取BLOB字段.
SELECT DBMS_LOB.SUBSTR(BLOB_FIELD_NAME) FROM TABLE_NAME;
Run Code Online (Sandbox Code Playgroud)
小智 14
使用此 SQL 获取 BLOB 的前 2000 个字符。
SELECT utl_raw.cast_to_varchar2(dbms_lob.substr(<YOUR_BLOB_FIELD>,2000,1)) FROM <YOUR_TABLE>;
Run Code Online (Sandbox Code Playgroud)
注意:这是因为,Oracle 将无法处理长度超过 2000 的 BLOB 的转换。
我可以使用 TO_CLOB (文档)让它工作:
select
to_clob(BLOB_FIELD)
from
TABLE_WITH_BLOB
where
ID = '<row id>';
Run Code Online (Sandbox Code Playgroud)
这在 Oracle 19c 中适用于我,其 BLOB 字段大于 VARCHAR 限制。我获得可读文本(来自包含 JSON 的 BLOB)
SQL Developer也提供此功能:
双击结果网格单元格,然后单击编辑:
然后在弹出窗口的右上部分,“以文本查看”(您甚至可以看到图像。)
就是这样!
如果你想在文本里面搜索,而不是查看它,这可行:
with unzipped_text as (
select
my_id
,utl_compress.lz_uncompress(my_compressed_blob) as my_blob
from my_table
where my_id='MY_ID'
)
select * from unzipped_text
where dbms_lob.instr(my_blob, utl_raw.cast_to_raw('MY_SEARCH_STRING'))>0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
397065 次 |
| 最近记录: |