Oracle命令批量编译无效对象

DECLARE
  V_OBJOWN  DBA_OBJECTS.OWNER%TYPE;
  V_OBJNAME DBA_OBJECTS.OBJECT_NAME%TYPE;
  V_OBJTYPE DBA_OBJECTS.OBJECT_TYPE%TYPE;
  V_NUM     NUMBER;

  CURSOR CUR IS
    SELECT T.OWNER, T.OBJECT_NAME, T.OBJECT_TYPE
      FROM DBA_OBJECTS T
     WHERE T.STATUS = 'INVALID'
       AND T.OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'TRIGGER');
BEGIN
  SELECT COUNT(*)
    INTO V_NUM
    FROM DBA_OBJECTS T
   WHERE T.STATUS = 'INVALID'
     AND T.OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'TRIGGER');
  IF V_NUM > 0 THEN
    OPEN CUR;
    LOOP
      FETCH CUR
        INTO V_OBJOWN, V_OBJNAME, V_OBJTYPE;
      EXIT WHEN CUR%NOTFOUND;
      BEGIN
        EXECUTE IMMEDIATE 'alter ' || V_OBJTYPE || ' ' || V_OBJOWN || '.' ||
                          V_OBJNAME || ' compile';
        DBMS_OUTPUT.PUT_LINE('compile ' || V_OBJOWN || '.' || V_OBJNAME ||
                             ' succeed!');
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE('compile ' || V_OBJOWN || '.' || V_OBJNAME ||
                               ' failed! ' || SQLERRM);
      END;
    END LOOP;
    CLOSE CUR;
  ELSE
    DBMS_OUTPUT.PUT_LINE('No invalid objects need to be compiled');
  END IF;
END;

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值