2016-03-22 62 views
1

我的代碼/ PLSQL功能如下:PLSQL CLOB最大長度誤差

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。

請幫

+0

最後T_STRING分配不能夠採取長字符串,即使我已經宣佈它作爲CLOB.As FAS我知道,應該儘可能多的字符,它wants.All人物來到我身邊20000 characters.Than ,什麼問題 –

回答

0

因爲結果可能是大的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; 
/
+0

非常感謝。它工作:-) –