oracle 批量刪除從存儲過程(物理備份),表及備份表

/*
1.刪除存儲過程
2.備份data表
3.刪除data表
*/
DECLARE
  V_SQL       VARCHAR2(2000);--刪除的語句
CURSOR C1 IS --要刪除的存儲過程名
select * from (
      select distinct upper(owner)||'.'||upper(object_name) procedures from dba_procedures)WHERE procedures in (
      'ERMP_DATA.CSTM_TEN_HTZQRZ_PROC', 'ERMP_DATA.CUSTOMER_SCLIENT_01_2_PROC'
);
CURSOR T1 IS--要刪除的表名
       select * from (
       select OWNER||'.'||TABLE_NAME TABLE_NAME from dba_tables where owner ='ERMP_DATA' 
  ) where TABLE_NAME in (
 'ERMP_DATA.CSTM_TEN_HTZQRZ','ERMP_DATA.CUSTOMER_SCLIENT_01_2','ERMP_DATA.LQD_NSFR1','ERMP_DATA.MKT_CURRENCY_EXCHANGE_RATE',
);
BEGIN
      for p1 in C1 loop 
      V_SQL:= ' DROP PROCEDURE '|| p1.procedures;--下線存儲過程
      dbms_output.put_line(V_SQL);
      EXECUTE IMMEDIATE V_SQL;
      end loop;
      
      for p2 in T1 loop 
      V_SQL:= ' CREATE TABLE ERMP_HIST.'||substr(p2.TABLE_NAME,11)||' AS SELECT * FROM '|| p2.TABLE_NAME; --備份表
      dbms_output.put_line(V_SQL);
      EXECUTE IMMEDIATE V_SQL;
      V_SQL:= ' DROP TABLE '|| p2.TABLE_NAME;--刪除表
      dbms_output.put_line(V_SQL);
      EXECUTE IMMEDIATE V_SQL;
      end loop;   
END;
/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章