Как сделать, чтобы процедура всегда компилировась с заданным уровнем оптимизации?
Eсть PL/SQL-процедура с большой интенсивностью вычислений. Если она не скомпилирована с уровнем оптимизации 3 (по умолчанию установленно 2), то ее производительность заметно ниже.
Как сделать, чтобы процедура всегда компилировалась с уровнем оптимизации не ниже 3?
Свободный перевод вопроса How can I make sure a PL/SQL program is compiled with optimization turned on? от участника @Steven Feuerstein
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
В этом случае надо воспользоваться условной компиляцией, а точнее, директивой ERROR.
Воспроизводимый пример:
create or replace procedure computation is
begin
$IF $$plsql_optimize_level < 3 $THEN
$ERROR 'This procedure must be compiled with plsql_optimize_level=3 or higher!' $END
$END
for n in 1..10e6 loop null; end loop;
end computation;
/
LINE/COL ERROR
--------- -------------------------------------------------------------
4/9 PLS-00179: $ERROR: This procedure must be compiled with plsql_optimize_level=3 or higher!
alter session set plsql_optimize_level=3
/
alter procedure computation compile
/
exec computation
PL/SQL procedure successfully completed.
Свободный перевод ответа от участника @Steven Feuerstein