在 Oracle 中提取长度大于 4000 的 BLOB SQL

Extract BLOB with length greater than 4000 in Oracle SQL

我正在尝试使用以下查询提取 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)

如果可以提取大于 4000 个字符的 BLOB 值,因为 varchar2 的限制是 4000,能否请您允许。

我尝试使用 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?

您可以尝试创建函数,而不是过程。示例(摘自 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;
/

然后在您需要的任何查询中使用该函数。

我找到了一种使用 to_clob 函数

获取输出的简单方法

select to_clob(BYTES_) from ACT