我正在尝试使用以下查询提取BLOB变量。
select utl_raw.cast_to_varchar2(BLOB_VAR) from Dual
但是我遇到一个错误。
ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 4060, maximum: 2000)
如果varchar2的上限为4000,请问是否可以提取大于4000个字符的BLOB值。
我尝试使用concat选项
select concat(concat(utl_raw.cast_to_varchar2(dbms_lob.substr(BYTES_,2000,1)),utl_raw.cast_to_varchar2(dbms_lob.substr(BYTES_,2000,2001))),utl_raw.cast_to_varchar2(dbms_lob.substr(BYTES_,2000,4001)))from ACT
但是我得到这个错误
01489. 00000 - result of string concatenation is too long```
Is there any way to get a longer string value?
答案 0 :(得分:0)
您可以尝试创建函数,而不是过程。示例(摘自link)
create or replace function F(B BLOB)
return clob is
c clob;
n number;
begin
if (b is null) then
return null;
end if;
if (length(b)=0) then
return empty_clob();
end if;
dbms_lob.createtemporary(c,true);
n:=1;
while (n+32767<=length(b)) loop
dbms_lob.writeappend(c,32767,utl_raw.cast_to_varchar2(dbms_lob.substr(b,32767,n)));
n:=n+32767;
end loop;
dbms_lob.writeappend(c,length(b)-n+1,utl_raw.cast_to_varchar2(dbms_lob.substr(b,length(b)-n+1,n)));
return c;
end;
/
然后在需要的任何查询中使用该函数。
答案 1 :(得分:0)
我找到了一种使用to_clob函数获取输出的简单方法
select to_clob(BYTES_) from ACT