为了在带有或不带有调试信息的SQL * PLUS脚本中重新编译模式,我有以下代码:
define debug_compile = true
alter session set plsql_optimize_level = case when &&debug_compile = true then 1 else 2 end;
alter session set plsql_debug = &&debug_compile;
exec dbms_utility.compile_schema(schema => 'MYSCHEMA');
似乎case
指令不允许使用alter session
语句。除了引入另一个变量的明显方法外,是否还有其他方法可以基于变量debug_compile
设置优化级别?
有点混乱,但是您可以使用动态SQL:
define debug_compile = true
alter session set plsql_debug = &&debug_compile;
begin
execute immediate 'alter session set plsql_optimize_level = '
|| case when &&debug_compile then 1 else 2 end;
end;
/
exec dbms_utility.compile_schema(schema => 'MYSCHEMA');
= true
有点多余,所以我删除了它。