Как присвоить переменной CLOB большой текст?

Есть переменная csv_text:

DECLARE
  csv_text        CLOB;

А как в нее добавить большой текст?

Т.к. если добавлять напрямую:

csv_text        := '*** Здесь текст длиной более 32767 символов ***';

Выдает ошибку:

[65000][6550] ORA-06550: Строка 328, столбец 1:
PLS-00172: строковый литерал слишком длинный


Ответы (1 шт):

Автор решения: Alex R.

Это означает что вы пытаетесь строковой переменной присвоить больше, чем 32767 символов, так как значение справа это не CLOB, a varchar2(32767).

Это означает что вы пытаетесь строковому литералу присвоить больше чем 32767 символов.

Чтобы это обойти разбейте свою строку на несколько. Вот пример.

DECLARE
  vStr1 VARCHAR2(32000);
  vStr2 VARCHAR2(32000);
  vClob CLOB;
BEGIN
  vStr1 := RPAD('*', 32000, '*');
  vStr2 := RPAD('*', 32000, '*');
  vClob := vStr1 || vStr2;

  dbms_output.put_line(length(vClob));
end;

Для ускорения работы, чтобы было меньше преобразований типов можно использовать dbms_lob.

DECLARE
  vStr1 VARCHAR2(32000);
  vStr2 VARCHAR2(32000);
  vClob CLOB;
BEGIN
  dbms_lob.createtemporary(vClob, true);

  vStr1 := RPAD('*', 32000, '*');
  vStr2 := RPAD('*', 32000, '*');

  dbms_lob.append(vClob, vStr1);
  dbms_lob.append(vClob, vStr2);

  dbms_output.put_line(length(vClob));

  dbms_lob.freetemporary(vClob);
end;
→ Ссылка