如the documentation提到:
DEBUG
具有相同的效果作爲PLSQL_OPTIMIZE_LEVEL=1
-instructs的PL/SQL編譯器生成和將代碼存儲用於由PL/SQL調試器使用。 Oracle建議使用PLSQL_OPTIMIZE_LEVEL=1
而不是DEBUG。
因此,您可以在創建對象之前或在重新編譯架構之前設置該值。爲了與'編譯調試'時的SQL Developer相匹配,您還需要將PLSQL_DEBUG
設置爲true。這裏有一個快速演示:
create or replace package p42 as
function f return number;
end p42;
/
create or replace package body p42 as
function f return number is
begin
return 42;
end f;
end p42;
/
select name, type, plsql_optimize_level, plsql_debug
from user_plsql_object_settings where name = 'P42';
NAME TYPE PLSQL_OPTIMIZE_LEVEL PLSQL_DEBUG
------------------------------ ------------ -------------------- -----------
P42 PACKAGE 2 FALSE
P42 PACKAGE BODY 2 FALSE
alter session set plsql_optimize_level = 1;
alter session set plsql_debug = true;
exec dbms_utility.compile_schema(user);
select name, type, plsql_optimize_level, plsql_debug
from user_plsql_object_settings where name = 'P42';
NAME TYPE PLSQL_OPTIMIZE_LEVEL PLSQL_DEBUG
------------------------------ ------------ -------------------- -----------
P42 PACKAGE 1 TRUE
P42 PACKAGE BODY 1 TRUE
當然你可以在第一時間創建對象之前,改變你的會話,但如果你知道你要始終重新編譯架構無論如何 - 如果你必須重新編譯一切,而不僅僅是無效的對象 - 然後等到那時可能是好的。但是,如果你創建啓用調試的對象,你仍然可以重新編譯,並保留與:
DBMS_UTILITY.COMPILE_SCHEMA(schema => user, reuse_settings => true);
...如果你想重新編譯的一切,或者如果你只是想重新編譯無效對象:
DBMS_UTILITY.COMPILE_SCHEMA(schema => user, compile_all => false, reuse_settings => true);
難道'DBMS_UTILITY.COMPILE_SCHEMA(模式=>用戶,compile_all =>假,reuse_settings => TRUE);'切下來了很多?或者如果你有很多依賴關係,可能會達到最大迭代限制? –