快捷搜索:

Oracle10g新特性——选择性编译

Oracle10g中供给了一个十分方便开拓职员的新特点——选择性编译。即可以经由过程前提,只编译PL/SQL中的部分代码。假如你对C++很认识,那你会对这个特点感到异常亲切,由于它和C++中的前提宏十分相似。在9i的时刻,开拓职员将自己的调试信息加入到法度榜样中,每每release之后都没有删掉落,这些信息轻则影响可读性,严重的话会影响系统机能。有了这个特点后,这个问题就可以办理了。

下面举个简单的例子解释一下:

创建一个有前提宏的函数:

1 SQL> CREATE OR REPLACE FUNCTION F_TESTDEBUG

2 RETURN NUMBER IS

3 v_count number;

4 BEGIN

5 select count(*) into v_count from user_tables;

6

7 $IF $$my_debug $THEN

8 DBMS_OUTPUT.PUT_LINE('Tables number is: ' || v_count);

9 $END

10

11 return v_count;

12 END;

13 /

Function created

激活debug信息(经由过程变量$$my_debug节制):

SQL> ALTER FUNCTION F_TESTDEBUG COMPILE PLSQL_CCFLAGS = 'my_debug:TRUE' REUSE SETTINGS;

Function altered

运行函数:

SQL> set serveroutput on

1 SQL> declare

2 v_res number;

3 begin

4 v_res := F_TESTDEBUG;

5 end;

6 /

Tables number is: 22

PL/SQL procedure successfully completed

这时刻,可以看到debug信息被打印出来了。

我们再去掉落调试信息:

SQL> ALTER FUNCTION F_TESTDEBUG COMPILE PLSQL_CCFLAGS = 'my_debug:FALSE' REUSE SETTINGS;

Function altered

履行函数:

1 SQL> declare

2 v_res number;

3 begin

4 v_res := F_TESTDEBUG;

5 end;

6 /

PL/SQL procedure successfully completed

我们可以看到,调试信息没有了。

当然,我们在实际release的时刻就不必要用alter了(除非现场调试),可以在release脚本的头部定义好my_debug变量就OK了。

您可能还会对下面的文章感兴趣: