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