是否可以从DBMS_UTILITY.compile_schema命令中排除某些包?即使将参数设置为FALSE只重新编译无效对象,我也希望确保永远排除某些包以防止依赖性错误。
答案 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标头和主体之间的不同编译命令语法。