oracle execute immediate動態sql組合執行comment小記

wisdomone1發表於2012-12-17
create or replace procedure proc_auto_comment
as
v_number pls_integer;
v_repl_string varchar2(100);
v_sql varchar2(4000);
v_sqlerrm varchar2(1000);
begin
 v_number:=2;
 for i in 1..v_number loop
   --因為動態sql如果出錯程式碼會一直hang在哪兒,為了快速診斷是什麼原因,新增異常
   begin
     execute immediate 'create table T_COMMENT_'||to_char(i)||'
                        (
                          A INTEGER,
                          B INTEGER
                        )';
   exception when others then
     v_sqlerrm:=sqlerrm;
     dbms_output.put_line(v_sqlerrm);
     exit;
   end;
   v_repl_string:='T_COMMENT_'||to_char(i);
  
   begin
       --暫時發現合併多個comment子句如用execute immediate會報無效字元,先分開編寫吧
       v_sql:='comment on column '||v_repl_string||'.A is '||''''||'這是a'||''''||';'||chr(10)||chr(13)||  'comment on column '||v_repl_string||'.B is '||''''||'這是b'||''''||';';
       execute immediate   v_sql; 
    exception when others then
        v_sqlerrm:=sqlerrm;
        dbms_output.put_line(v_sqlerrm);
        exit;
   end;                
 end loop;
end;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-751203/,如需轉載,請註明出處,否則將追究法律責任。

相關文章