PLSQL Language Reference-PL/SQL語言基礎-條件編譯-條件編譯舉例

LuiseDalian發表於2014-03-08

條件編譯舉例

BEGIN

    $IF DBMS_DB_VERSION.VER_LE_10_1 $THEN  -- 選擇指令開始

        $ERROR '不支援的資料庫版本' $END   -- 錯誤指令

    $ELSE

        DBMS_OUTPUT.PUT_LINE (

        '版本 ' || DBMS_DB_VERSION.VERSION || '.' ||

        DBMS_DB_VERSION.RELEASE || ' 被支援.'

        );

    -- 這個commit語句從10.2開始支援

    COMMIT WRITE IMMEDIATE NOWAIT;

    $END  -- 選擇指令結束

END;

 


 

--設定會話引數

--ALTER SESSION SET PLSQL_CCFLAGS = 'my_debug:FALSE, my_tracing:FALSE';

--ALTER SESSION SET PLSQL_CCFLAGS = 'my_debug:TRUE, my_tracing:FALSE';

--包規範

CREATE OR REPLACE PACKAGE my_pkg AS

    SUBTYPE my_real IS

        $IF DBMS_DB_VERSION.VERSION < 10 $THEN

            NUMBER;

        $ELSE

            BINARY_DOUBLE;

        $END

 

    my_pi my_real;

    my_e  my_real;

END my_pkg;

 

--包體

CREATE OR REPLACE PACKAGE BODY my_pkg AS

BEGIN

    $IF DBMS_DB_VERSION.VERSION < 10 $THEN

        my_pi := 3.14159265358979323846264338327950288420;

        my_e  := 2.71828182845904523536028747135266249775;

    $ELSE

        my_pi := 3.14159265358979323846264338327950288420d;

        my_e  := 2.71828182845904523536028747135266249775d;

    $END

END my_pkg;

 

 

CREATE OR REPLACE PROCEDURE circle_area(radius my_pkg.my_real) IS

    my_area       my_pkg.my_real;

    my_data_type  VARCHAR2(30);

BEGIN

    my_area := my_pkg.my_pi * (radius**2);

 

    DBMS_OUTPUT.PUT_LINE

    ('半徑: ' || TO_CHAR(radius) || ' 面積: ' || TO_CHAR(my_area));

 

    $IF $$my_debug $THEN

        SELECT DATA_TYPE INTO my_data_type

        FROM USER_ARGUMENTS

        WHERE OBJECT_NAME = 'CIRCLE_AREA'

        AND ARGUMENT_NAME = 'RADIUS';

 

        DBMS_OUTPUT.PUT_LINE('RADIUS引數的資料型別為: ' || my_data_type);

    $END

END;

 

--執行儲存過程2, 修改環境變數,重新編譯儲存過程,再執行。

BEGIN

    circle_area(5);

END;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1103464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章