我正在使用Oracle 11g,想要获取文本的长度。通常我会使用select length(myvar) from table
,但是这次无法这样做。
我想查询的表有一个BLOB
列,保存了字符或照片。我想知道我的BLOB
列中有多少个字符。
我尝试使用UTL_RAW.CAST_TO_VARCHAR2(myblob) from table
将BLOB
转换为字符,但这个函数似乎不能正确地工作,或者我可能犯了一个错误。
例如:
我的BLOB
中有单词Section
,当我在数据库中以十六进制形式查看它时,我看到S.e.c.t.i.o.n.
。我不知道为什么每个字母之间都有点。
然后我使用了这个查询:
select UTL_RAW.CAST_TO_VARCHAR2(myblob)
from table
这个查询的结果是'S'
,所以它并不是我BLOB
中完整的单词,当我进行这个查询时:
select length(UTL_RAW.CAST_TO_VARCHAR2(myblob))
from table
结果是18
,但单词Sections
并不含18个字符。
我试图将BLOB
转换为VARCHAR
,虽然我认为最好的选择应该是CLOB
,因为它可以保存的文本长度超过了VARCHAR
的限制。我尝试通过执行以下查询来实现这一点(我不确定这是否正确,但这是我在互联网上找到的):
select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(myblob, 32767, 1))
from table
此查询还会返回 'S'