Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669820
  • 博文数量: 759
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4845
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 13:51
文章分类

全部博文(759)

文章存档

2011年(1)

2008年(758)

我的朋友

分类:

2008-10-27 13:58:15

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

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

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

          SQL> CREATE OR REPLACE FUNCTION F_TESTDEBUG
         RETURN NUMBER IS
         v_count number;
         BEGIN
         select count(*) into v_count from user_tables;
         $IF $$my_debug $THEN
         DBMS_OUTPUT.PUT_LINE('Tables number is: ' || v_count);
         $END
         return v_count;
         END;
         /
        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
         v_res number;
         begin
         v_res := F_TESTDEBUG;
         end;
         /
        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
         v_res number;
         begin
         v_res := F_TESTDEBUG;
         end;
         /
        PL/SQL procedure successfully completed

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

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

【责编:michael】

--------------------next---------------------

阅读(270) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~