Как присвоить переменной 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;