ecpgの使い方このセクションはecpgツールの使い方を説明します。プリプロセッサプリプロセッサはecpgと呼ばれます。PostgreSQLのbin/ディレクトリにインストールされています。ライブラリecpgライブラリは、libecpg.aもしくはlibecpg.soと呼ばれます。このライブラリはPostgreSQLサーバーとの通信にlibpqライブラリを使用します。-lpqというリンクオプションを使用してリンクする必要があります。このライブラリはいくつか"隠された"メソッドを持っていて、とても便利な場合があります。*stream)——第1引数が0以外で渡された場合、デバッグログをonにします。デバッグログはstreamで実行されます。ほとんどのSQL文は引数と結果をログに出力します。重要な関数ECPGdoは、拡張された文字列(たとえばすべての引数用変数が挿入されたもの)とPostgreSQLサーバーからの結果の両方をログに出力します。これはSQL文のエラーを探すのにとても便利です。このメソッドはデータベースと接続されている場合TRUEを返し、それ以外はFALSEを返します。エラー処理PostgreSQLサーバーからのエラーを見つけるためにはファイルのincludeセクションに下記のような行を追加してください。この一文は下記のようなsqlcaという名前の構造体と変数を定義します。sqlca;もし上のSQL文でエラーが発生しなかった場合、sqlca.sqlcodeが0(ECPG_NO_ERROR)になります。sqlca.sqlcodeが0よりも小さい場合、データベース定義が与えられた問い合わせと合わないといった深刻なエラーです。0より大きい場合はテーブルが要求された行を含まないといった通常のエラーです。sqlca.sqlerrm.sqlerrmcは、エラーを説明する文字列を持っています。その文字列はソースファイルの行数で終わります。起こり得るエラーを以下に示します。%d.通常は起こりません。仮想メモリに空きがないことを知らせるものです。%d.通常は起こりません。ライブラリの知らないものをプリプロセッサが作ったことを知らせます。プリプロセッサとライブラリのバージョンが互換性のないものを使っている可能性があります。%d.PostgreSQLが、持っている変数より多い引数を返した場合です。:var1,:var2リストでいくつかのホスト変数を忘れたのでしょう。%d.PostgreSQLが、持っているホスト変数より少ない引数を返した場合です。:var1,:var2リストにホスト変数を多く入れすぎています。%d.問い合わせが数行を返したにもかかわらず、指定された変数が配列になっていないことを示します。入力したSELECTが一意なものではなかったのでしょう。%d.ホスト変数がint型でPostgreSQLデータベースのフィールドがintでは表せない別の型を含んでいることを示します。ライブラリはこの変換にstrtolを使います。int型では表せない型を含んでいることを示します。ライブラリはこの変換にstrtolを使います。%d.ホスト変数がfloat型でPostgreSQLデータベースのフィールドがfloatでは表せない別の型を含んでいるということを示します。ライブラリはこの変換にstrtodを使います。%d.ホスト変数がbool型でPostgreSQLデータベースのフィールドが't'でも'f'でもないということを示します。%d.おそらく問い合わせが空だったために、PostgreSQLがPGRES_EMPTY_QUERYを返しました。%d.NULLを許容しない変数に対してNULLを返したため、PostgreSQLはECPG_MISSING_INDICATORを返しました。%d.通常の変数が再問い合わせの配列に使用されたため、PostgreSQLはECPG_NO_ARRAYを返しました。value.配列が要求されている変数に対し通常の変数を返したため、PostgreSQLはECPG_DATA_NOT_ARRAYを返しました。%d.プログラムが、存在しない接続にアクセスしようとしています。%d.プログラムが、存在するけれども開いていない接続にアクセスしようとしています。%d.使おうとしている文が用意されていません。%d.指定された記述子が見つかりません。使用しようとしている文が用意されていません。%d.指定された記述子インデックスは範囲外です。%d.指定された記述子が見つかりません。使用しようとしている文が用意されていません。%d.数値型でない変数に対してデータベースが数値を返しました。%d.数値型の変数に対してデータベースが数値以外の値を返しました。%d.PostgreSQLのエラーです。このメッセージはPostgreSQLのバックエンドからのエラーメッセージを含んでいます。%d.スタート、コミット、トランザクションのロールバックができないことをPostgreSQLが警告しています。%d.データベースへの接続ができませんでした。%d."一般的な"エラーで、問い合わせているものが見つけられないか、カーソルで通りすぎてしまったものです。