PLSQL CLOB最大长度错误

PLSQL CLOB maximum length error

我的code/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,也不能占用更多字符。 我的 table 中只有 152 列,我正在为它们制作 column_nameA=B.column_nameA.

请帮忙

由于 varchar2(在我的系统上大小 > 32512)结果可能太大而无法处理,您应该将 return 值键入 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;
/