Ошибка максимальной длины PLSQL CLOB
Мой код / функция PLSQL выглядит следующим образом:
function build_update(p_table_name varchar2) --function to build update statement
return varchar2
as
t_string CLOB;
begin
for i in (select column_name from ALL_TAB_COLS where table_name = p_table_name)
loop
t_string := t_string || i.column_name||'='||' b' ||'.'||i.column_name||',';
end loop;
t_string := to_clob(to_char(substr(t_string, 1, instr(t_string, ',', -1)-1)));
return t_string;
end;
При создании динамического обновления SQL для использования в слиянии, он показывает ошибку, так как может связывать значение LONG только для вставки в столбец LONG.
Даже если используется CLOB, он не может содержать больше символов. В моей таблице только 152 столбца, и для них я делаю column_nameA=B.column_nameA.
Пожалуйста помоги
1 ответ
Решение
Поскольку результат может быть слишком большим, чтобы справиться с varchar2
(размер> 32512
в моей системе), вы должны ввести возвращаемое значение как CLOB
чтобы избежать ошибки. Но тогда вы должны справиться CLOB
в вашем коде, что весело.
declare
function build_update(p_table_name varchar2) --function to build update statement
return clob as
t_string CLOB;
begin
for i in (select column_name from ALL_TAB_COLS where table_name = p_table_name)
loop
t_string := t_string || i.column_name||'='||' b' ||'.'||i.column_name||',';
end loop;
t_string := substr(t_string, 1, instr(t_string, ',', -1)-1);
return t_string;
exception
when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line(length(t_string));
return 'kaput';
end;
begin
dbms_output.put_line(substr(build_update('MY_TABLE'), 1, 32512));
exception
when others then
dbms_output.put_line('-in-main:'||sqlerrm);
end;
/