我试图从SQL控制台中查看Oracle BLOB中的内容.

我知道它包含一个较大的文本体,我只想看到文本,但下面的查询只表明该字段中有一个BLOB:

select BLOB_FIELD from TABLE_WITH_BLOB where ID = '<row id>';

我得到的结果与我预期的不太一样:

    BLOB_FIELD
    -----------------------
    oracle.sql.BLOB@1c4ada9

那么,我能做什么样的魔法咒语来把这个斑点变成它的文本表示呢?

PS:我只是试图从SQL控制台(Eclipse数据工具)查看BLOB的内容,而不是在代码中使用它.

推荐答案

首先,您可能希望将文本存储在CLOB/NCLOB列中,而不是为二进制数据设计的BLOB(顺便说一句,您的查询将使用CLOB).

以下查询将让您看到blob中文本的前32767个字符(最多),前提是所有字符集都是兼容的(blob中存储的文本的原始CS,用于VARCHAR2的数据库的CS):

select utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_FIELD)) from TABLE_WITH_BLOB where ID = '<row id>';

Sql相关问答推荐

Postgresql -如何计算刷卡和刷卡时间

SQL查询以条件空值跟踪生产操作结果进展

有没有一种正确的方法来利用SQL UNION来从三个潜在查询中 Select 最大值?

使用sede获取不一定有两个不同标签的所有问题

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

如何将我的联接数据放入每个用户每月多行的列中?

动态组/转置

仅在日期相隔时递增(Oracle SQL)

从类似JSON的字符串列创建新列

不同计数的 Postgres PIVOT 表

统计重复记录的总数

SQL Select 字母范围没有给我任何东西

如何计算两个非周期性时间序列+分组的重叠持续时间

如何在sparksql查询中使用日期值?

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

从 varchar 列中删除特殊字符后的前面的零和字符时遇到问题

为数组中的每个元素从表中收集最大整数

如果当前日期是一周中的某一天,则从另一天提取结果

如何在 SQL Server 中参数化 Select top 'n'

Lag() 获取snowflake的值变化