如何从 Oracle SQL 中的 BLOB 获取文本内容
我试图从 SQL 控制台查看 Oracle BLOB 内部的内容。
我知道它包含相当大的文本正文,我只想查看文本,但以下查询仅表明该字段中有一个 BLOB:
select BLOB_FIELD from TABLE_WITH_BLOB where ID = '<row id>';
我得到的结果并不完全符合我的预期:
BLOB_FIELD ----------------------- oracle.sql.BLOB@1c4ada9
那么什么类型我可以使用哪些魔法咒语将 BLOB 转换为它的文本表示形式?
PS:我只是想从 SQL 控制台(Eclipse Data Tools)查看 BLOB 的内容,而不是在代码中使用它。
I am trying to see from an SQL console what is inside an Oracle BLOB.
I know it contains a somewhat large body of text and I want to just see the text, but the following query only indicates that there is a BLOB in that field:
select BLOB_FIELD from TABLE_WITH_BLOB where ID = '<row id>';
the result I'm getting is not quite what I expected:
BLOB_FIELD ----------------------- oracle.sql.BLOB@1c4ada9
So what kind of magic incantations can I do to turn the BLOB into it's textual representation?
PS: I am just trying to look at the content of the BLOB from an SQL console (Eclipse Data Tools), not use it in code.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
首先,您可能希望将文本存储在 CLOB/NCLOB 列中,而不是存储在 BLOB 中,BLOB 是为二进制数据设计的(顺便说一句,您的查询将使用 CLOB)。
以下查询将让您看到 blob 内文本的前 32767 个字符(最多),前提是所有字符集都兼容(存储在 BLOB 中的文本的原始 CS、用于 VARCHAR2 的数据库的 CS):
First of all, you may want to store text in CLOB/NCLOB columns instead of BLOB, which is designed for binary data (your query would work with a CLOB, by the way).
The following query will let you see the first 32767 characters (at most) of the text inside the blob, provided all the character sets are compatible (original CS of the text stored in the BLOB, CS of the database used for VARCHAR2) :
SQL Developer 也提供了此功能:
双击结果网格单元格,然后单击编辑:
然后在弹出窗口的右上角,“以文本形式查看”(您甚至可以看到图像..)
就是这样!
SQL Developer provides this functionality too :
Double click the results grid cell, and click edit :
Then on top-right part of the pop up , "View As Text" (You can even see images..)
And that's it!
您可以使用下面的 SQL 从表中读取 BLOB 字段。
You can use below SQL to read the BLOB Fields from table.
使用此 SQL 获取 BLOB 的前 2000 个字符。
注意:这是因为,Oracle 将无法处理长度超过 2000 的 BLOB 转换。
Use this SQL to get the first 2000 chars of the BLOB.
Note: This is because, Oracle will not be able to handle the conversion of BLOB that is more than length 2000.
我可以使用 TO_CLOB (docs):
这在 Oracle 19c 中适用于我,其 BLOB 字段大于 VARCHAR 限制。 我获得可读文本(来自包含 JSON 的 BLOB)
I can get this to work using TO_CLOB (docs):
This works for me in Oracle 19c, with a BLOB field which larger the the VARCHAR limit. I get readable text (from a JSON-holding BLOB)
如果您想在文本内部搜索而不是查看文本,则可以使用以下方法:
If you want to search inside the text, rather than view it, this works:
巴恩的答案经过修改后对我有用,因为我的专栏没有压缩。 快速而肮脏的解决方案:
Barn's answer worked for me with modification because my column is not compressed. The quick and dirty solution:
我为此苦苦挣扎了一段时间,并实现了 PL/SQL 解决方案,但后来意识到,在 Toad 中,您只需双击结果网格单元格,它就会弹出一个包含文本内容的编辑器。 (我使用的是 Toad v11)
I struggled with this for a while and implemented the PL/SQL solution, but later realized that in Toad you can simply double click on the results grid cell, and it brings up an editor with contents in text. (i'm on Toad v11)
如果您的文本使用 DEFLATE 算法压缩在 blob 内并且非常大,您可以使用此函数来读取它
然后运行 select 来获取文本
希望这会对某人有所帮助。
In case your text is compressed inside the blob using DEFLATE algorithm and it's quite large, you can use this function to read it
Then run select to get text
Hope this will help someone.
你可以尝试这个:
但是,它会被限制为 4000 字节
You can try this:
However, It would be limited to 4000 byte
为我工作,
Worked for me,
使用
TO_CHAR
函数。将
NCHAR
、NVARCHAR2
、CLOB
或NCLOB
数据转换为数据库字符集。 返回的值始终为VARCHAR2
。Use
TO_CHAR
function.Converts
NCHAR
,NVARCHAR2
,CLOB
, orNCLOB
data to the database character set. The value returned is alwaysVARCHAR2
.