プリプロセッサ指示子

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 33章ECPG - C言語による埋め込みSQL | 早送り | 次のページ

# 33.12. プリプロセッサ指示子

## 33.12.1. ファイルのインクルード

埋め込みSQLプログラムに外部ファイルをインクルードするには、以下を使用します。

    EXEC SQL INCLUDE filename;

埋め込みSQLプリプロセッサは、``filename`.h`という名前のファイルを探し、その前処理を行い、最終的にC出力の中に含めます。 このようにして、ヘッダファイル内の埋め込みSQL文が正しく扱われます。

これは以下と異なることに注意してください。

    #include <filename.h>

このファイルにはSQLコマンド用前処理が行われません。 当然ながら、他のヘッダファイルをインクルードするCの`#include`ディレクティブを使用することができます。

> 注意: 通常のSQLの大文字小文字の区別規則に従う`EXEC SQL INCLUDE`コマンドの一部であったとしても、インクルードファイルの名前は大文字小文字が区別されます。

## 33.12.2. #defineおよび#undef指示子

Cで既知の`#define`指示子と同様、埋め込みSQLでも似たような概念を持ちます。

    EXEC SQL DEFINE name;
    EXEC SQL DEFINE name value;

このため、以下のように名前を定義することができます。

    EXEC SQL DEFINE HAVE_FEATURE;

また、定数を定義することもできます。

    EXEC SQL DEFINE MYNUMBER 12;
    EXEC SQL DEFINE MYSTRING 'abc';

事前の定義を削除するには`undef`を使用します。

    EXEC SQL UNDEF MYNUMBER;

当然、Cの`#define`や`#undef`を埋め込みSQLプログラムで使用することは可能です。 違いは宣言した値をどこで評価されるかです。 `EXEC SQL DEFINE`を使用する場合、`ecpg`プリプロセッサがその定義を評価し、その値を置換します。 例えば、

    EXEC SQL DEFINE MYNUMBER 12;
    ...
    EXEC SQL UPDATE Tbl SET col = MYNUMBER;

と記載した場合、`ecpg`による置換がすでに行われていますので、Cコンパイラでは`MYNUMBER`という名前や識別子を参照することはありません。 埋め込みSQL問い合わせで使用する予定の定数に`#define`を使用することはできませんので注意してください。 この場合、埋め込みSQLプリプロセッサがこの宣言を参照することができないためです。

## 33.12.3. ifdef、ifndef、else、elif、endif指示子

以下の指示子を使用して、コンパイルするコード部分を選択することができます。

`EXEC SQL ifdef `name`;`

  `name`を検査し、その`name`が`EXEC SQL define `name``で作成されていた場合に後続行を処理します。

`EXEC SQL ifndef `name`;`

  `name`を検査し、その`name`が`EXEC SQL define `name``で作成されていない場合に後続行を処理します。

`EXEC SQL else;`

  `EXEC SQL ifdef `name``または`EXEC SQL ifndef `name``で導入されたセクションの代替セクションを開始します。

`EXEC SQL elif `name`;`

  `name`を検査し、その`name`が`EXEC SQL define `name``で作成されている場合に代替セクションを開始します。

`EXEC SQL endif;`

  代替セクションを終了します。

以下に例を示します。

    EXEC SQL ifndef TZVAR;
    EXEC SQL SET TIMEZONE TO 'GMT';
    EXEC SQL elif TZNAME;
    EXEC SQL SET TIMEZONE TO TZNAME;
    EXEC SQL else;
    EXEC SQL SET TIMEZONE TO TZVAR;
    EXEC SQL endif;

前のページ | ホーム | 次のページ
エラーの扱い | 上に戻る | 埋め込みSQLプログラムの処理