条件付きプリコンパイルでは、特定の条件に基づいて、ホスト・プログラム内のコード・セクションの組込み(または除外)を行います。たとえば、UNIXでプリコンパイルするときにはあるコード・セクションを組み込み、VMSでプリコンパイルするときには別のコード・セクションを組み込むことができます。条件付きプリコンパイルを使用すると、異なる環境で実行可能なプログラムを作成できます。
コードの条件付きセクションは、環境と実行するアクションを定義する文で示されます。これらのセクションには、ホスト言語の文とEXEC SQL文を記述できます。次の文により、プリコンパイルを条件付きで制御できます。
EXEC ORACLE DEFINE symbol; -- define a symbol EXEC ORACLE IFDEF symbol; -- if symbol is defined EXEC ORACLE IFNDEF symbol; -- if symbol is not defined EXEC ORACLE ELSE; -- otherwise EXEC ORACLE ENDIF; -- end this control block
EXEC ORACLE文はすべて、ホスト言語の文の終了記号で終わる必要があります。たとえばPro*COBOLでは、条件文は「END-EXEC
」で終了する必要があります。Pro*FORTRANでは改行記号で終了する必要があります。
次の例では、シンボルsite2が定義されている場合のみ、SELECT
文がプリコンパイルされます。
EXEC ORACLE IFDEF site2; EXEC SQL SELECT DNAME INTO :dept_name FROM DEPT WHERE DEPTNO = :dept_number; EXEC ORACLE ENDIF;
次の例に示すように条件ブロックはネストできます。
EXEC ORACLE IFDEF outer; EXEC ORACLE IFDEF inner; ... EXEC ORACLE ENDIF; EXEC ORACLE ENDIF;
ホスト言語または埋込みSQLコードをIFDEFとENDIFの間に記述し、シンボルを定義しないことで、そのコードをコメント行にすることができます。
シンボルを定義するには2通りの方法があります。1つは、次の文をホスト・プログラムに組み込む方法です。
EXEC ORACLE DEFINE symbol;
もう1つは、次の構文を使用してコマンドラインでシンボルを定義する方法です。
... INAME=filename ... DEFINE=symbol
symbolの部分は大/小文字区別がありません。
Oracleプリコンパイラをシステムにインストールした時点で、ポート固有のいくつかのシンボルが事前に定義されます。たとえば、事前に定義されたオペレーティング・システムのシンボルには、CMS、MVS、MS-DOS、UNIXおよびVMSがあります。