Как сделать, чтобы процедура всегда компилировась с заданным уровнем оптимизации?

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

→ Ссылка