Oracleg中提供了一個十分方便開發人員的新特性——選擇性編譯即可以通過條件只編譯PL/SQL中的部分代碼如果你對C++很熟悉那你會對這個特性感覺非常親切因為它和C++中的條件宏十分相似在i的時候開發人員將自己的調試信息加入到程序中往往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_OUTPUTPUT_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_debugTRUE REUSE SETTINGS
Function altered
運行函數
SQL> set serveroutput on
SQL> declare
v_res number;
begin
v_res := F_TESTDEBUG;
end;
/
Tables number is:
PL/SQL procedure successfully completed
這時候可以看到debug信息被打印出來了
我們再去掉調試信息
SQL> ALTER FUNCTION F_TESTDEBUG COMPILE PLSQL_CCFLAGS = my_debugFALSE 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了
From:http://tw.wingwit.com/Article/program/Oracle/201311/18211.html