ページの先頭行へ戻る
Enterprise Postgres 9.5 アプリケーション開発ガイド
FUJITSU Software

7.4.2 アプリケーションのコンパイル

COBOL言語による埋め込みSQLソースファイルの名前には拡張子pcoを付けてください。

pcoファイルをecobpgコマンドでプレコンパイルするとCOBOL言語のソースファイルが作成されるので、COBOLコンパイラを使用してコンパイルしてください。

プレコンパイルの例

ecobpg testproc.pco

ecobpgコマンドのオプションにCOBOLコードの記法として、固定形式または可変形式を指定することができます。デフォルトは固定形式となります。

COBOLコードの記法およびオプションの指定方法については、“D.1 機能と操作における注意事項”と“D.12.1 ecobpg”を参照してください。

SQL文に対して、オプティマイザヒントのブロックコメントを指定している場合は、ecobpgコマンドに以下のオプションを指定します。

--enable-hint

オプティマイザヒントのブロックコメント(以降、ヒント句と呼びます)を有効にします。本オプションを指定しない場合、ecobpgのプレコンパイルによりヒント句が取り除かれ、ヒント句が無効となります。

ヒント句が指定可能なSQL文は、SELECT、INSERT、UPDATEおよびDELETEです。

ヒント句が指定可能な位置は、SELECT、INSERT、 UPDATE、DELETEまたはWITHのいずれかのキーワードの直後のみです。それ以外の場所に指定した場合は、構文エラーとなります。

ヒント句の指定例
EXEC SQL SELECT /*+ IndexScan(prod ix01) */ name_id 
INTO :name_id FROM prod WHERE id = 1 END-EXEC.

オプティマイザヒントの詳細については、“11.1.1 オプティマイザヒント”を参照してください。

埋め込みSQLのソースファイルのエンコードと、プレコンパイル実行時のロケールが異なる場合は、ecobpgコマンドに以下のオプションを指定して、埋め込みSQLのソースファイルのエンコードを指定します。

-E エンコード

エンコードは“UTF8”、“SJIS”、“EUC_JP”のいずれかを設定することができます。

本オプションを省略した場合はロケールで処理します。


登録集ファイルのパス

ecobpgコマンドはエラーを取り扱うための集団項目sqlca_tを定義しており、以下のパスに格納された登録集ファイルに定義されています。

SolarisLinuxLinux/Solarisの場合

登録集ファイルの名前

登録集ファイルの格納先

SQLCA-COBOL.cob

<FUJITSU Enterprise Postgresクライアント機能のインストールディレクトリ>/include

WindowsWindows(R)の場合

登録集ファイルの名前

登録集ファイルの格納先

SQLCA-COBOL.cob

<FUJITSU Enterprise Postgresクライアント機能のインストールディレクトリ>\include

ecobpgコマンドはCOBOLファイルを生成するときに、この登録集ファイルを複写するために、オプションを付けないCOPY文を挿入します。そのため、コンパイルするときに登録集ファイルの格納先のパスを指定してください。パスの指定方法は、使用するコンパイラの仕様に従ってください。

なお、拡張子cobが付かない同じ内容の登録集ファイルも用意されています。

参考

sqlca_tの詳細は、“D.7.2 sqlca”を参照してください。

使用するライブラリ

ecobpgによって生成されたアプリケーションは、ECPGのライブラリを介してPostgreSQLに接続します。ECPGのライブラリは、内部でlibpqのライブラリをロードします。

ライブラリのパス

ECPGライブラリの場所と名前は、“6.4.2 アプリケーションのコンパイル”、libpqライブラリの場所と名前は、“第5章 C言語用ライブラリ(libpq)”を参照してください。

COBOLコンパイラは、様々なライブラリのリンク方法を提供しているので、パスやライブラリの指定方法は、使用するコンパイラの仕様に従ってください。

副プログラムのエントリ情報

動的プログラム構造を利用してECPGライブラリを利用する場合には、以下のエントリ情報を追記してください。詳細は、使用するコンパイラの仕様に従ってください。

SolarisLinuxLinux/Solarisの場合

エントリ情報

sqlprint=libecpg.so

ECOBPGPrepareCall=libecpg.so

ECOBPGAddArgInt=libecpg.so

ECOBPGset_sqlca=libecpg.so

ECOBPGsetcommit_Call=libecpg.so

ECOBPGsetconn_Call=libecpg.so

ECOBPGconnect_Call=libecpg.so

ECOBPGdisconnect_Call=libecpg.so

ECOBPGget_desc_header_Call=libecpg.so

ECOBPGget_desc_Call=libecpg.so

ECOBPGset_desc_header_Call=libecpg.so

ECOBPGset_desc_Call=libecpg.so

ECOBPGdeallocate_desc_Call=libecpg.so

ECOBPGallocate_desc_Call=libecpg.so

ECOBPGdescribe_Call=libecpg.so

ECOBPGdo_Call=libecpg.so

ECOBPGtrans_Call=libecpg.so

ECOBPGprepare_Call=libecpg.so

ECOBPGdeallocate_Call=libecpg.so

ECOBPGdeallocate_all_Call=libecpg.so

ECOBPGdeclare_Call=libecpg.so

ECOBPGopen_Call=libecpg.so

ECOBPGfetch_Call=libecpg.so

ECOBPGclose_Call=libecpg.so

ECOBPGAddQuery=libecpg.so

ECOBPGAddVariable=libecpg.so

ECOBPGAddVariableConst=libecpg.so

SQLPRINT=libecpg.so

ECOBPGPREPARECALL=libecpg.so

ECOBPGADDARGINT=libecpg.so

ECOBPGSET_SQLCA=libecpg.so

ECOBPGSETCOMMIT_CALL=libecpg.so

ECOBPGSETCONN_CALL=libecpg.so

ECOBPGCONNECT_CALL=libecpg.so

ECOBPGDISCONNECT_CALL=libecpg.so

ECOBPGGET_DESC_HEADER_CALL=libecpg.so

ECOBPGGET_DESC_CALL=libecpg.so

ECOBPGSET_DESC_HEADER_CALL=libecpg.so

ECOBPGSET_DESC_CALL=libecpg.so

ECOBPGDEALLOCATE_DESC_CALL=libecpg.so

ECOBPGALLOCATE_DESC_CALL=libecpg.so

ECOBPGDESCRIBE_CALL=libecpg.so

ECOBPGDO_CALL=libecpg.so

ECOBPGTRANS_CALL=libecpg.so

ECOBPGPREPARE_CALL=libecpg.so

ECOBPGDEALLOCATE_CALL=libecpg.so

ECOBPGDEALLOCATE_ALL_CALL=libecpg.so

ECOBPGDECLARE_CALL=libecpg.so

ECOBPGOPEN_CALL=libecpg.so

ECOBPGFETCH_CALL=libecpg.so

ECOBPGCLOSE_CALL=libecpg.so

ECOBPGADDQUERY=libecpg.so

ECOBPGADDVARIABLE=libecpg.so

ECOBPGADDVARIABLECONST=libecpg.so

WindowsWindows(R)の場合

エントリ情報

sqlprint=libecpg.dll

ECOBPGPrepareCall=libecpg.dll

ECOBPGAddArgInt=libecpg.dll

ECOBPGset_sqlca=libecpg.dll

ECOBPGsetcommit_Call=libecpg.dll

ECOBPGsetconn_Call=libecpg.dll

ECOBPGconnect_Call=libecpg.dll

ECOBPGdisconnect_Call=libecpg.dll

ECOBPGget_desc_header_Call=libecpg.dll

ECOBPGget_desc_Call=libecpg.dll

ECOBPGset_desc_header_Call=libecpg.dll

ECOBPGset_desc_Call=libecpg.dll

ECOBPGdeallocate_desc_Call=libecpg.dll

ECOBPGallocate_desc_Call=libecpg.dll

ECOBPGdescribe_Call=libecpg.dll

ECOBPGdo_Call=libecpg.dll

ECOBPGtrans_Call=libecpg.dll

ECOBPGprepare_Call=libecpg.dll

ECOBPGdeallocate_Call=libecpg.dll

ECOBPGdeallocate_all_Call=libecpg.dll

ECOBPGdeclare_Call=libecpg.dll

ECOBPGopen_Call=libecpg.dll

ECOBPGfetch_Call=libecpg.dll

ECOBPGclose_Call=libecpg.dll

ECOBPGAddQuery=libecpg.dll

ECOBPGAddVariable=libecpg.dll

ECOBPGAddVariableConst=libecpg.dll

SQLPRINT=libecpg.dll

ECOBPGPREPARECALL=libecpg.dll

ECOBPGADDARGINT=libecpg.dll

ECOBPGSET_SQLCA=libecpg.dll

ECOBPGSETCOMMIT_CALL=libecpg.dll

ECOBPGSETCONN_CALL=libecpg.dll

ECOBPGCONNECT_CALL=libecpg.dll

ECOBPGDISCONNECT_CALL=libecpg.dll

ECOBPGGET_DESC_HEADER_CALL=libecpg.dll

ECOBPGGET_DESC_CALL=libecpg.dll

ECOBPGSET_DESC_HEADER_CALL=libecpg.dll

ECOBPGSET_DESC_CALL=libecpg.dll

ECOBPGDEALLOCATE_DESC_CALL=libecpg.dll

ECOBPGALLOCATE_DESC_CALL=libecpg.dll

ECOBPGDESCRIBE_CALL=libecpg.dll

ECOBPGDO_CALL=libecpg.dll

ECOBPGTRANS_CALL=libecpg.dll

ECOBPGPREPARE_CALL=libecpg.dll

ECOBPGDEALLOCATE_CALL=libecpg.dll

ECOBPGDEALLOCATE_ALL_CALL=libecpg.dll

ECOBPGDECLARE_CALL=libecpg.dll

ECOBPGOPEN_CALL=libecpg.dll

ECOBPGFETCH_CALL=libecpg.dll

ECOBPGCLOSE_CALL=libecpg.dll

ECOBPGADDQUERY=libecpg.dll

ECOBPGADDVARIABLE=libecpg.dll

ECOBPGADDVARIABLECONST=libecpg.dll

COBOL言語ライブラリを動的リンクするアプリケーションのコンパイル例を説明します。
なお、“<xy>”は製品のバージョンレベルを示します。

SolarisLinuxLinux/Solarisの場合
  • Linux 64ビット版アプリケーションの場合

    cobol -M  -o testproc -I/opt/fsepv<xy>client64/include -L/opt/fsepv<xy>client64/lib -lecpg -lpq testproc.cob
  • Linux 32ビット版アプリケーションの場合

    cobol -M  -o testproc -I/opt/fsepv<xy>client32/include -L/opt/fsepv<xy>client32/lib -lecpg -lpq testproc.cob
  • Solaris 64ビット版アプリケーションの場合

    cobol -M  -o testproc -I/opt/fsepv<xy>client64/include -L/opt/fsepv<xy>client64/lib -lecpg -lpq testproc.cob
  • Solaris 32ビット版アプリケーションの場合

    cobol -M  -o testproc -I/opt/fsepv<xy>client32/include -L/opt/fsepv<xy>client32/lib -lecpg -lpq testproc.cob
WindowsWindows(R)の場合

64ビット版のオペレーティングシステムでコンパイルする例です。

  • 64ビット版アプリケーションの場合

    > SET LIB=%ProgramFiles%\Fujitsu\fsepv<xy>client64\lib;%LIB%
    > cobol -I "%ProgramFiles%\Fujitsu\fsepv<xy>client64\include" -M testproc.cob
    > link testproc.obj F4AGCIMP.LIB LIBCMT.LIB LIBECPG.LIB LIBPQ.LIB /OUT:testproc.exe
  • 32ビット版アプリケーションの場合

    [NetCOBOL V10.5以前の場合]

    > SET LIB=%ProgramFiles(x86)%\Fujitsu\fsepv<xy>client32\lib;%LIB%
    > cobol32 -I "%ProgramFiles(x86)%\Fujitsu\fsepv<xy>client32\include" -M testproc.cob
    > link testproc.obj LIBC.LIB F3BICIMP.LIB LIBECPG.LIB LIBPQ.LIB /OUT:testproc.exe 

    [NetCOBOL V11.0以降の場合]

    > SET LIB=%ProgramFiles(x86)%\Fujitsu\fsepv<xy>client32\lib;%LIB%
    > cobol32 -I "%ProgramFiles(x86)%\Fujitsu\fsepv<xy>client32\include" -M testproc.cob
    > link testproc.obj MSVCRT.LIB F3BICIMP.LIB LIBECPG.LIB LIBPQ.LIB /OUT:testproc.exe