procedure案例一

看点如下:

1.truncate不能够直接执行,必须使用动态sql

2.动态sql拼接范例

3.跳过出错,使用when others then

4.返回出错信息,使用sqlerrm

存储过程建立如下:

 

  
  
  
  
  1. create or replace procedure ver_emlog 
  2.  
  3. is 
  4.   
  5. V_SQL VARCHAR2(1000); 
  6. BEGIN 
  7.   execute immediate 'truncate table dbmteam.result'
  8.   FOR x IN (SELECT * 
  9.               FROM dbmteam.dbm_tmp813 
  10.              WHERE nilgdbid IN (127000000001696266, 
  11.                                 127000000001696274, 
  12.                                 127000000001696287, 
  13.                                 127000000107667376, 
  14.                                 127000000812172410)) LOOP 
  15.   
  16.   
  17.   V_SQL:= 'INSERT INTO dbmteam.result 
  18.   (tableid, owner, tablename, eid) 
  19.   (SELECT '|| x.nitbid||','''||x.lowner||''','''|| x.vctbname||''' ,'||'a.eid 
  20.      from '||x.lowner||'.'||x.vctbname||' a 
  21.      left join (select distinct recordid 
  22.                  FROM gm.emlog 
  23.                 WHERE tableid = '||x.nitbid||') b 
  24.        on a.eid = b.recordid 
  25.     where b.recordid is null)'; 
  26.   
  27.   --DBMS_OUTPUT.put_line (V_SQL); 
  28. begin 
  29.   execute immediate V_SQL; 
  30.   commit
  31. exception 
  32.   when others then 
  33.     DBMS_OUTPUT.put_line(V_SQL); 
  34.     DBMS_OUTPUT.put_line(SQLERRM); 
  35. end
  36.   END LOOP; 
  37.   
  38. END
  39.   
 
调用如下:
 
   
   
   
   
  1. begin 
  2.   dbmteam.ver_emlog; 
  3. end
  4.   

你可能感兴趣的:(存储过程,procedure)