Извлечение BLOB длиной более 4000 в Oracle SQL - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь извлечь 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)

Не могли бы вы, пожалуйста, разрешить, если это возможно, извлечь значение BLOB больше 4000 символов, поскольку предел 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?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я нашел простой способ получить вывод с помощью функции to_clob

select to_clob(BYTES_) from ACT

0 голосов
/ 16 мая 2019

Вы можете попытаться создать функцию, а не процедуру. Пример (извлечение из ссылка )

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;
/

Затем используйте функцию в любом запросе.

...