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?
基础教程推荐
猜你喜欢
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- 无法解决整理冲突 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
