Ошибка максимальной длины 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;
/
Другие вопросы по тегам