Oracle 检测表过程

CREATE OR REPLACE PROCEDURE PROC_DROP_TABLE(T_NAME IN VARCHAR2) IS
  C_TYPE  VARCHAR2(20);
  T_COUNT INT;
  V_COUNT INT;
  I_COUNT INT;
  S_COUNT INT;
BEGIN
  BEGIN
    SELECT OBJECT_TYPE
      INTO C_TYPE
      FROM ALL_OBJECTS
     WHERE OBJECT_NAME = UPPER(T_NAME);
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.put_line('THE  ' || T_NAME ||
                           '  IS  NOT  IN THIS  DATABASE !');
  END;

  SELECT COUNT(*)
    INTO T_COUNT
    FROM USER_TABLES
   WHERE TABLE_NAME = UPPER(T_NAME);
  SELECT COUNT(*)
    INTO V_COUNT
    FROM USER_VIEWS
   WHERE VIEW_NAME = UPPER(T_NAME);
  SELECT COUNT(*)
    INTO I_COUNT
    FROM USER_INDEXES
   WHERE INDEX_NAME = UPPER(T_NAME);
  SELECT COUNT(*)
    INTO S_COUNT
    FROM USER_SEQUENCES
   WHERE SEQUENCE_NAME = UPPER(T_NAME);
  -----------TABLE  
  IF C_TYPE = 'TABLE' THEN
    IF T_COUNT > 0 THEN
      EXECUTE IMMEDIATE 'DROP TABLE ' || T_NAME || ' purge';
      DBMS_OUTPUT.put_line('THE TABLE  :' || T_NAME || '  IS DROP !');
    END IF;
    COMMIT;
  END IF;
  --------- VIEW 
  IF C_TYPE = 'VIEW' THEN
    IF V_COUNT > 0 THEN
      EXECUTE IMMEDIATE 'DROP VIEW ' || T_NAME;
      DBMS_OUTPUT.put_line('THE  VIEW  :' || T_NAME || '  IS DROP !');
    END IF;
  END IF;
  --------- SQE
  IF C_TYPE = 'SEQUENCE' THEN
    IF S_COUNT > 0 THEN
      EXECUTE IMMEDIATE 'DROP SEQUENCE ' || T_NAME;
      DBMS_OUTPUT.put_line('THE  SEQUENCE  :' || T_NAME || '  IS DROP !');
    END IF;
  END IF;

  -------- INDEX 
  IF C_TYPE = 'INDEX' THEN
    IF I_COUNT > 0 THEN
      EXECUTE IMMEDIATE 'DROP INDEX ' || T_NAME;
      DBMS_OUTPUT.put_line('THE  INDEX  :' || T_NAME || '  IS DROP !');
    END IF;
  END IF;
END PROC_DROP_TABLE;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值