如何确保在打开优化的情况下编译PL / SQL程序?

时间:2018-04-12 14:50:15

标签: oracle performance optimization plsql conditional-compilation

我有一个计算密集型的PL / SQL程序。如果它没有编译优化级别设置为至少2(是的,我知道它是默认值),性能是可怕的。如何确保始终使用设置为2或更高的级别编译此过程?

1 个答案:

答案 0 :(得分:4)

PL / SQL的条件编译功能,更具体地说是错误指令,对于这种情况非常方便。在下面的示例中,我将优化级别设置为1,然后尝试编译我的计算密集型过程。在该过程中,我通过$$ plsql_optimize_level条件编译标志检查会话中优化级别的值。如果小于2,我强制编译错误。

ALTER SESSION SET plsql_optimize_level = 1
/

CREATE OR REPLACE PROCEDURE compute_intensive
AUTHID DEFINER
IS
BEGIN
   $IF $$plsql_optimize_level < 2
   $THEN
      $ERROR 
         'Compile compute_intensive at level 2 or higher!' 
      $END
   $END
   NULL;
END compute_intensive;
/

Errors: PROCEDURE COMPUTE_INTENSIVE
Line: 7 PLS-00179: $ERROR: compute_intensive must be compiled with maximum optimization!

ALTER SESSION SET plsql_optimize_level = 3
/

CREATE OR REPLACE PROCEDURE compute_intensive
AUTHID DEFINER
IS
BEGIN
   $IF $$plsql_optimize_level < 2
   $THEN
      $ERROR 'compute_intensive must be compiled with maximum optimization!' $END
   $END
   NULL;
END compute_intensive;
/

Procedure created.

使用我的LiveSQL script自行尝试。

有关条件编译here的更多信息。