Oracle - 使用DBMS_UTILITY.compile_schema排除某些软件包重新编译

时间:2014-07-21 12:49:32

标签: oracle plsql oracle10g

是否可以从DBMS_UTILITY.compile_schema命令中排除某些包?即使将参数设置为FALSE只重新编译无效对象,我也希望确保永远排除某些包以防止依赖性错误。

1 个答案:

答案 0 :(得分:2)

一种解决方案是使用脚本生成删除编译的编译。 E.g。

DECLARE
  CURSOR c1 IS 
    SELECT object_name, object_type 
    FROM user_objects
    WHERE status = 'INVALID'
    AND   object_name NOT IN ( 'EXCL_OBJ1', .... );
  cmd  VARCHAR2 (1000);
BEGIN
  FOR r1 IN c1 LOOP
    -- You will need logic here to cater for different 
    -- command e.g. PACKAGE and PACKAGE BODY
    cmd := 'ALTER ' || r1.object_type || ' ' || r1.object_name || ' compile';
    EXECUTE IMMEDIATE cmd;
  END LOOP;
END;

我通常有一个重复循环来计算无效对象,并在2个连续循环的计数相同时退出。

请注意,您需要一些逻辑来满足PACKAGE标头和主体之间的不同编译命令语法。