PL/SQL de Conditional Compile #3 Tweet
前回までのおさらい。
初期化パラメータをセッション単位で変更してコンパイルしていたが、Oracle10g R1 10.1.0.4.0以降及び、Oracle9i R2 9.2.0.6.0以降へバックポートされた条件付きコンパイル機能では一部利用できない初期化パラメータがあり、全リリースで共通のソースコードを利用するには、各リリースで利用できる初期化パラメータ PLSQL_DEBUG を利用するようにした。というところまでだった。
今回はいままでとは異なる方法で条件付きコンパイルを行ってみることにする。
その方法とは、初期化パラメータを利用せずパッケージの仕様部で宣言した定数を利用する方法だ。
この方法であれば、リリース毎にいくつかの制限のある初期化パラメータを利用せずに条件コンパイルが可能だ。
但し、その都度、パッケージ定数を変更するという手間はかかる。
実際に利用する際には、定数を変更する為のスクリプトを事前に用意しておき、そのスクリプトを実行するだけで行えるようにすると良いだろう。
また、パッケージをどのスキーマに定義するか、という点なども、よ〜〜〜く検討した上で利用した方が良いだろう。
ルール無しで利用した場合、後々混乱の原因になる可能性があるということは容易に想像できると思う。
● 条件コンパイルのフラグだけを定義したパッケージを作成する
以下の例では、C_DEBUG_ON定数だけを定義し、値はfalseとした。
CREATE OR REPLACE PACKAGE MyPROPERTIES AS
C_DEBUG_ON CONSTANT BOOLEAN := false;
END MyPROPERTIES;
● 以下、条件コンパイルのサンプルコード
以前作成したコードとの違いは、初期化パラメータではなく、前述したパッケージのC_DEBUG_ON定数を参照している点である。
CREATE OR REPLACE FUNCTION CONDITIONAL_COMPILATION_SAMPLE
RETURN TIMESTAMP
IS
vNow TIMESTAMP;
BEGIN
$IF myproperties.c_debug_on $THEN
DBMS_OUTPUT.ENABLE(20000);
DBMS_OUTPUT.PUT_LINE('======= start =====');
$END
SELECT SYSTIMESTAMP INTO vNow FROM dual;
$IF myproperties.c_debug_on $THEN
DBMS_OUTPUT.PUT_LINE('======= end =======');
$END
RETURN vNow;
END CONDITIONAL_COMPILATION_SAMPLE;
| 固定リンク | 0
コメント