How to convert BLOB to CLOB?(如何将BLOB转换为CLOB?)
本文介绍了如何将BLOB转换为CLOB?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是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.
。我不知道为什么每个字母之间都有这些点。
然后我使用this查询:
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'
推荐答案
对于任何来到此线程并想知道如何将斑点转换为块的人。这里有一个示例。
create function clobfromblob(p_blob blob) return clob is
l_clob clob;
l_dest_offsset integer := 1;
l_src_offsset integer := 1;
l_lang_context integer := dbms_lob.default_lang_ctx;
l_warning integer;
begin
if p_blob is null then
return null;
end if;
dbms_lob.createTemporary(lob_loc => l_clob
,cache => false);
dbms_lob.converttoclob(dest_lob => l_clob
,src_blob => p_blob
,amount => dbms_lob.lobmaxsize
,dest_offset => l_dest_offsset
,src_offset => l_src_offsset
,blob_csid => dbms_lob.default_csid
,lang_context => l_lang_context
,warning => l_warning);
return l_clob;
end;
这篇关于如何将BLOB转换为CLOB?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何将BLOB转换为CLOB?
基础教程推荐
猜你喜欢
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01