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

转载自:http://www.hellodba.com/reader.php?ID=149&lang=CN

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值