带大小写的会话声明

问题描述 投票:0回答:1

为了在带有或不带有调试信息的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设置优化级别?

oracle sqlplus
1个回答
2
投票

有点混乱,但是您可以使用动态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有点多余,所以我删除了它。

© www.soinside.com 2019 - 2024. All rights reserved.