Oracle 10g新特性——選擇性編譯

來源:互聯網
上載者:User
Oracle 10g新特性——選擇性編譯

作者: fuyuncat

來源: www.HelloDBA.com

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.