用大小写改变会话语句

Alter session statement with case

为了在有或没有调试信息的情况下重新编译 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 有点多余,所以我删除了它。