Изменить сессионное заявление с делом - PullRequest
0 голосов
/ 27 марта 2020

Чтобы перекомпилировать схему в сценарии 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?

1 Ответ

2 голосов
/ 27 марта 2020

Это немного грязно, но вы могли бы использовать Dynami c 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 немного избыточно, поэтому я удалил его.

...