Home > 10g新特性 > Oracle 10g新特性——选择性编译

Oracle 10g新特性——选择性编译

 

 

        Oracle10g中提供了一个十分方便开发人员的新特性——选择性编译。即可以通过条件,只编译PL/SQL中的部分代码。如果你对C++很熟悉,那你会对这个特性感觉非常亲切,因为它和C++中的条件宏十分相似。在9i的时候,开发人员将自己的调试信息加入到程序中,往往release之后都没有删掉,这些信息轻则影响可读性,严重的话会影响系统性能。有了这个特性后,这个问题就可以解决了。

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

 

创建一个有条件宏的函数:

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

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

 

执行函数:

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了。

Categories: 10g新特性 Tags:
  1. No comments yet.
  1. No trackbacks yet.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin