下面举个简单的例子解释一下:
创建一个有条件宏的函数:
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了。
来源:WWW.HelloDBA.COM