Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598116
  • 博文数量: 825
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 14:19
文章分类

全部博文(825)

文章存档

2011年(1)

2008年(824)

我的朋友

分类:

2008-10-27 14:27:58

  10g中提供了一个十分方便开发人员的新特性——选择性编译。即可以通过条件,只编译PL/SQL中的部分代码。如果你对很熟悉,那你会对这个特性感觉非常亲切,因为它和中的条件宏十分相似。在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了。

【责编:John】

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

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