儲存過程中巢狀儲存過程的變數執行方式

lnwxzyp發表於2008-12-09

今天給新同事講資料維護過程的時候,他提出了寫一個儲存過程來檢查日誌表出錯之後呼叫相關的儲存過程,我們的日誌表當中寫入的表名和相應儲存過程名稱的差別是多了一個etl_,因此ETL_||table就是儲存過程的名稱.但是在編譯過程當中無法將變數的儲存過程名稱在巢狀時執行,經過多方查詢,一度懷疑是否可以執行這種變數式的儲存過程,但是終於找到了方法,儲存過程如下:

create or replace procedure yx_etl_proc as
 cursor tb is select  'ETL_'||table_name
             from etl_log
             where end_time is null and (table_name,start_time) in  (select table_name,max(start_time)
             from etl_log where start_time>trunc(sysdate)
             group by table_name);
       c_proc_name etl_log.table_name%type;
begin
 
open tb;
loop
fetch tb into c_proc_name;
exit when tb%notfound;
execute  immediate 'begin '||c_proc_name||';end;';  
commit;
end loop;
close tb;
end yx_etl_proc;

粗體部分就是巢狀儲存過程的執行方法。

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

相關文章