8.2.3 Windows環境でのプリプロセス
- 〈この項の構成〉
(1) C言語の場合
(a) 環境変数の設定
UAPをプリプロセスする前に,必要に応じてHiRDB.INIファイルに次に示す環境変数を設定します。
なお,HiRDB.INIファイルは,%windir%ディレクトリに格納されています。
- PDCLIB:
-
COPY文でソースファイルに引き込まれるヘッダファイルを検索するディレクトリを指定します。複数のディレクトリを指定する場合,ディレクトリ同士をセミコロンで区切ります。この環境変数を省略すると,カレントディレクトリだけが検索されます。
- PDCLTLANG:
-
特に文字コード種別を指定してプリプロセスする場合に指定します。省略した場合は,sjisが仮定されます。詳細については,「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。
- PDDEFAULTOPTION:
-
プリプロセスのオプションについて,省略時の動作を指定します。通常は,この環境変数を指定する必要はありません。互換モードを適用したい場合に,指定してください。詳細については,「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。
(b) SQLプリプロセサの起動
SQLプリプロセサの起動は,次に示す三つの方法があります。
-
アイコンの重ね合わせによる実行
-
ファイル名の指定による実行
-
コマンドプロンプト又はMS-DOSプロンプトからの実行
-
アイコンの重ね合わせによる実行
エクスプローラでプリプロセスしたいファイルをドラッグして,プリプロセサのファイル(PDCPP.EXE(C言語の場合),又はPDOCC.EXE(C++言語の場合))に重ねると実行できます。
-
ファイル名の指定による実行
プリプロセサのアイコン(PDCPP.EXE(C言語の場合),又はPDOCC.EXE(C++言語の場合))をクリックし,次に示す手順で実行します。
-
ファイルメニューから「ファイル名を指定して実行」を選択します。
-
コマンドラインにファイル名,及びオプションを指定して実行します。
-
-
コマンドプロンプト又はMS-DOSプロンプトからの実行
コマンドプロンプト又はMS-DOSプロンプトを起動し,PDCPP.EXE(C言語の場合),又はPDOCC.EXE(C++言語の場合)コマンドを入力して実行します。
コマンドラインに入力するコマンドの形式を次に示します。
PDCPP.EXE 入力ファイル名称 [オプション[出力ファイル名称]]
注 C++言語の場合,下線で示す部分をPDOCC.EXEに置き換えてください。
- 入力ファイル名称:
-
UAPソースファイルの名称を指定します。
ファイル識別子は,.EC(C言語の場合),又は.ECP(C++言語の場合)にします。
- 出力ファイル名称:
-
ポストソースファイルの名称を指定します。
出力ファイル名称を省略した場合,ファイル識別子は.C(C言語の場合),又は.CPP(C++言語の場合)になります。
- 認可識別子:
-
SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合,CONNECT時のユーザ識別子が仮定されます。
- オプション:
-
必要に応じて次の表に示すオプションを指定します。なお,オプションは大文字,小文字を区別しません。
表8‒9 プリプロセスオプション(Windows環境のC言語の場合) プリプロセスオプション
内容
/S
構文チェックだけをして,ポストソースを出力しない場合に指定します。このオプションを省略すると,ポストソースが出力されます。
なお,同時に/Xpも指定しないと,SQLプリプロセサは厳密なSQLの構文チェックができないため,SQL文に文法上のエラーが発生していても発見できない場合があるので注意が必要です。
/O ファイル名
出力するポストソースのファイル名称を指定します。
このオプションを省略すると,入力ファイル名称のファイル識別子を.C(C言語の場合),又は.CPP(C++言語の場合)に変更されたものが出力ファイル名称になります。
/A 認可識別子
静的SQLで認可識別子を省略した場合,及び仮定する認可識別子を変更する場合に指定します。
静的SQLとは,INSERT文,UPDATE文,DELETE文,1行SELECT文,OPEN文(形式1),CALL文,LOCK文,及びPURGE TABLE文を示します。
認可識別子を引用符(")で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため,ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は,すべての英字を大文字で指定してください。
最大30バイトの認可識別子を指定できます。
認可識別子を省略した場合に仮定する認可識別子については,マニュアル「HiRDB Version 9 SQLリファレンス」の「名前の修飾」を参照してください。
/h64
64ビットモード用のポストソースを作成する場合に指定します。ただし,32ビット版のプリプロセサを使用した場合は指定できません。
long型を使用した埋込み変数の宣言はエラーになります。
/Xe{y|n}
PREPRARE文実行時のカーソルを,自動的にクローズするかどうかを指定します。
- y:
-
カーソルを自動的にクローズするポストソースを生成します。
- n:
-
カーソルを自動的にクローズしないポストソースを生成します。
省略した場合,クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。
/Xv
/E2オプションを指定した場合に,VARCHAR型,及びBINARY型に対応する構造体を,通常の構造体として解析するときに指定します。VARCHAR型,及びBINARY型に対応する埋込み変数を宣言するためには,SQL TYPE IS〜を使用します。このオプションは,/E2オプションと同時に指定する必要があります。なお,繰返し列のマクロを使用している場合,このオプションを指定しないでください。
/XA
X/Openに準じたAPIを使用して,UAPを作成する場合に指定してください。
/Xo
UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき,出力方法は次のようになります。
-
SQL文中の埋込み変数は?パラメタに置換します。
-
1行SELECT文のINTO句を削除します。
-
SQL文中の語句間の空白が2文字以上の場合,空白1文字に置き換えます。
-
複数行に分割して記述しているSQLは1行にまとめます。
-
実行時にサーバに送られるSQLだけ出力します。実行されないSQL文(WHENEVER文,BEGIN DECLARE SECTIONなど)は出力しません。
-
SQLの末尾にはセミコロン(;)を付けます。
-
埋込み変数の宣言は出力しません。
-
動的SQLは,SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。
-
OPEN文は,形式1のカーソルの場合だけ,問合せ式を出力します。
-
ポストソースは生成しません。
/E{1|2|3}["オプション文字列"]
UAP中で使用しているプリプロセサ宣言文の有効化と,埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。なお,このオプションはPDOCC.EXEでは無効となります。
- /E1:
-
プリプロセサ宣言文の有効化を指定します。
- /E2:
-
埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。また,ポインタでの埋込み変数指定,及び構造体の参照を使用する場合にも指定します。
- /E3:
-
/E1と/E2の両方を指定します。
- "オプション文字列":
-
インクルードするファイルを検索するディレクトリのパス名を,Cコンパイラに指定する/Iオプションの形式で指定します。オプション文字列に複数のオプションを記述する場合は,セミコロンで区切ってください。また,任意のCコンパイラも指定できます。なお,/E2オプション指定時には無視されます。
- ≪留意事項≫
-
-
/E1又は/E3を指定すると,内部的にCコンパイラが呼び出されるため,PATH環境変数にコンパイラへのパス名を設定しておく必要があります。
-
/E1又は/E3を指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。
-
/E1又は/E3を指定し,UAPソースファイル中でSQLのCOPY文を使用する場合は,-Ecオプションを同時に指定する必要があります。
-
/Xp
厳密なSQLの構文チェックをする場合に指定してください。ただし,次のUAPをプリプロセスする場合は指定しないでください。
-
XDM/RD E2接続用のUAP
-
SQL予約語削除機能を使用するUAP
-
集合演算子MINUSを使用するUAP
これらのUAPをプリプロセスするときにこのオプションを指定すると,XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。
/XU16[L|B][T"型指定子"]
-
UTF-16のバイトオーダを指定します。
埋込み変数の宣言で文字集合名UTF16を指定した場合に,埋込み変数に格納するUTF-16のバイトオーダを指定します。
- /XU16L[T"型指定子"]:
-
UTF-16のバイトオーダをリトルエンディアンにします。
- /XU16B[T"型指定子"]:
-
UTF-16のバイトオーダをビッグエンディアンにします。
L/Bを省略,又はこのオプションを省略した場合は,UTF-16のバイトオーダを,プリプロセスを実行するOSのバイトオーダにします。
-
UTF-16の埋込み変数の展開に使用する型指定子を指定します。
SQL TYPE IS CHAR,又はSQL TYPE IS VARCHARで始まるデータ記述で埋込み変数を宣言した場合に,ポストソース中に展開されるCの宣言の中でUTF-16の文字データを格納する変数,又は構造体メンバに付ける型指定子を指定します。
型指定子が示す型の配列要素1個に,UTF-16の2バイトの文字データ1個を格納するので,sizeof(型指定子)==2となる型指定子だけが指定できます。
- <型指定子の指定例>
-
次に示す指定例は,sizeof(wchar_t)==2となるコンパイラでだけ使用できます。
/XU16T"wchar_t"
次に示す指定例は,sizeof(unsigned short)==2なので,どのコンパイラでも使用できます。
/XU16T"unsigned short"
T"型指定子"を省略,又はこのオプションを省略した場合,型指定子にcharが使用されます。このとき,char型の配列要素2個にUTF-16の2バイトの文字データ1個を格納します。
/g{c89|c99}
/E2,/E3オプションを指定した場合,SQLプリプロセサがUAPソースを解析するとき準拠するCの標準規格を指定します。
- /gc89:
-
C89(ISO/IEC 9899:1990, Programming languages - C)に準拠します。
- /gc99:
-
C99(ISO/IEC 9899:1999, Programming languages - C)に準拠します。
省略した場合,/gc89が仮定されます。
/E2,/E3オプションを指定しない場合,このオプションを指定しても無視されます。
/Ec
/E1又は/E3オプションを指定した場合に,UAPソースファイル中でSQLのCOPY文を使用できるようにします。
なお,それ以外の場合,このオプションの指定に関係なくCOPY文は使用できます(このオプションの指定は無視されます)。
- ≪留意事項≫
-
このオプションを指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。
/Xs
UAPに埋め込んだSQL文中に単純注釈(-- 〜 改行)を記述する場合に指定します。
単純注釈の記述規則については,「SQLの記述規則」の10.を参照してください。
このオプションは,省略時にも仮定されます。ただし,0904互換モードを適用した場合は仮定されませんので,オプションを指定することを検討してください。
- 注1
-
/Eオプション指定時に使用できる機能を次に示します。
機能
省略
/E1
/E2
/E3
#defineで定義したマクロを有効にする
×
○
×
○
#includeでインクルードしたヘッダファイルを有効にする※
×
○
×
○
#if,#ifdefなどの条件コンパイルを有効にする
×
○
×
○
UAP中の任意の場所で宣言した変数を,埋込み変数として使用する
×
×
○
○
構造体を埋込み変数として使用する
×
×
○
○
ポインタを埋込み変数として使用する
×
×
○
○
- (凡例)
-
○:該当する機能を使用できます。
×:該当する機能は使用できません。
- 注※
-
ヘッダファイル中に記述できる項目については,「SQLの記述規則」の23.を参照してください。
- 注2
-
/Eオプションを指定した場合,プリプロセサはMicrosoft Visual C++コンパイラ(呼び出し時のロード名:CL.EXE)を内部的に呼び出します。
これ以外のCコンパイラを使用する場合は,オプション文字列の先頭に,コンパイラのロードのディレクトリを含めた絶対パス名で指定します。ディレクトリ名,及びロード名には,空白及びセミコロンを含めることはできません。環境変数PATHにパス名を追加している場合は,絶対パス名でなくてもかまいません。
ロード名を指定する場合は,ロード名とオプションの間をセミコロンで区切ってください。
使用するコンパイラは,/Cオプションと/Eオプションをサポートしている必要があります。プリプロセサは,#define,#includeなどの擬似命令を処理するために,内部的にCコンパイラに対して/Cオプション,及び/Eオプションを指定して,作業用の一時ファイルを作成します。それ以外のオプション文字列に指定できるオプションは,使用するコンパイラの仕様に依存しますが,/Cオプション又は/Eオプションに背反するオプションを指定すると,プリプロセサはエラーとなります。ヘルプなどを表示するオプションを使用した場合は,動作が保証されません。
/E2,/E3オプションを指定すると,プリプロセサはUAP中の任意の箇所で宣言されている埋込み変数を認識するために,/gオプションで指定,又は仮定されたCの標準規格(C89又はC99)に準拠して構文を解析します。
構文解析の対象ファイルとプリプロセスオプションの関係を次の表に示します。
表8‒10 構文解析の対象ファイルとプリプロセスオプションの関係 項番
構文解析の対象となるファイル
プリプロセスオプション
-E2
-E3
-E2及び-E3の指定なし
1
UAPソースファイル
○
○
×※
2
COPY文で引き込むヘッダファイル
○
○
×※
3
#includeで引き込むヘッダファイル
×
○
×
- (凡例)
-
○:構文解析します。
×:構文解析しません。
- 注※
-
選択した規格に準拠した構文解析はしないで,埋込みSQL宣言節の中だけを埋込み変数のデータ記述形式に合わせて解析します。
なお,構文解析の対象ファイルの中で選択した規格に準拠しない構文が使用されている場合,構文エラーになることがあります。
構文エラーを回避するには,構文解析の対象ファイルの中で選択した規格に準拠した構文を使用するようにします。コンパイラ製品に付属しているヘッダファイル中で選択した規格に準拠しない構文が使用されているために構文エラーになる場合は,選択した規格に準拠したコンパイルをするコンパイラオプションを/E3オプション文字列に指定することで,問題を回避できることがあります。
- 注3
-
埋込み変数の宣言に文字集合名UTF16を指定した場合に,SQLプリプロセサは文字集合名記述領域に文字集合名を設定するソースコードをポストソース中に展開します。そのソースコードは,/XU16オプションの指定に依存して,リトルエンディアンの場合にはUTF-16LEを設定し,ビッグエンディアンの場合にはUTF-16BEを設定します。
埋込み変数を使用しないで,SQL記述領域と文字集合名記述領域を使用してUAP実行時に入出力変数の文字集合名を動的に決定する場合には,/XU16オプションで指定したバイトオーダは無効になります。この場合に,文字集合名をUTF16にするとバイトオーダがビッグエンディアンになります。
- 注4
-
/XU16オプションで型指定子を指定する機能の対象となるデータ記述を,次に示します。
-
SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名;
-
SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名[m];
-
SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 *変数名;
-
SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名;
-
SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名[m];
-
SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 *変数名;
-
- 注5
-
/gオプションの指定内容によって,C99で追加された予約語の扱いが変わります。C99で追加された予約語を次に示します。
restrict,inline,_Bool,_Complex,_Imaginary,_Pragma
ただし,restrictとinlineについては,C89では変数名などの識別子として使用できましたが,C99では識別子として使用できません。C89に準拠している既存のUAPで,restrictとinlineを識別子として使用している場合,そのUAPをC99に準拠して解析するとエラーになります。
C99で追加された予約語の扱いを次の表に示します。
/gオプション
扱い
省略
識別子として扱います。※
/gc99指定
C99に準拠して予約語として扱います。
/gc89指定
識別子として扱います。※
- 注※
-
先頭文字が下線文字(_)で2文字目が英大文字(A〜Z),又は下線文字の名前がC89の場合も,Cのライブラリ用として予約されています。このため,_Bool,_Complex,_Imaginary,_PragmaをUAP中で識別子として使用した場合,プリプロセサの動作は保証できません。
/gオプションの指定内容を次の表に示します。/gオプションの指定内容は,C99で追加された予約語の扱い以外には影響しません。
C99で追加された予約語の使用状況
/gオプションの指定内容
予約語として使用する
/gc99を指定することで,SQLプリプロセサを実行できます。ただし,Visual C++(バージョン2008まで)はC99に対応していないので,ポストソースをコンパイルできません。Visual C++以外のコンパイラを使用した場合,動作は保証できません。
識別子として使用する
/gオプションを省略,又は/gc89を指定します。
予約語としても識別子としても使用しない
/gオプションを指定する必要はありません。コメントとして任意に指定できます。
/gオプションを指定する場合は,次の点に注意してください。
-
C99に準拠したコンパイルができるコンパイラ製品を使用する場合,コンパイラ製品に付属しているヘッダファイルの中で,C99で追加された予約語が予約語として使用されていることがあります。/E3オプションを指定すると,そのヘッダファイルが#include文で引き込まれるおそれがあります。
-
コンパイラ製品の中には,予約語の扱いを個別に指定できるものがあります(例えば,restrictは予約語とし,inlineは予約語としない,と指定できます)。SQLプリプロセサは予約語の扱いを個別に指定できません。
- 注6
-
/E2,/E3オプションを指定しない場合,埋込みSQL宣言節で,C99で追加された予約語を識別子として扱います。また,埋込みSQL宣言節とSQL文(EXEC SQL 〜 ;)以外は解析しません。
- 注7
-
-E1,-E3,又は-Ecオプションを指定すると,プリプロセサはUAPソースファイルがあるディレクトリに一時ファイルを作成します。一時ファイルはプリプロセス終了時にプリプロセサが削除します。一時ファイルの名称は拡張子を除いてUAPソースファイルと同じです。拡張子を次に示します。
-
プリプロセスオプションが-E1又は-E3の場合:.I2
-
プリプロセスオプションが-Ecの場合:.I3
-E1又は-E3オプションと-Ecオプションを同時に指定した場合は,両方の拡張子の一時ファイルが作成されます。
プリプロセス実行時に一時ファイルと同名のファイルが既に存在すると,プリプロセサはそのファイルを上書きしてから削除します。ただし,プリプロセサの実行ユーザにそのファイルを上書きする権限がない場合,プリプロセサは次のメッセージを出力して処理を終了します。
-
拡張子.I2のファイルの場合:KFPZ13576-Eメッセージ(内部コンパイラ処理でエラー)
-
拡張子.I3のファイルの場合:KFPZ13706-Eメッセージ(ファイルのオープンでエラー)
また,プリプロセサの実行ユーザにそのファイルを削除する権限がない場合,プリプロセサはファイルの削除エラーを無視して処理を続行します。
誤って削除されないように,SQLプリプロセサ以外が作成するファイルの拡張子にはこれらの一時ファイルと同じ拡張子を使用しないことをお勧めします。同じ拡張子の同名のファイルを既に使用している場合は,それらをUAPソースファイルがあるディレクトリに置かないように注意してください。
なお,プリプロセサが異常終了すると,一時ファイルが削除されないで残ることがあります。残った一時ファイルは,同じUAPソースファイルに対するプリプロセスが再実行され正常終了すれば,削除されます。
-
-
C言語の場合のコマンド指定例
<例1>
UAPソースファイルの名称がSAMPLEで,ポストソースを出力しない場合
PDCPP SAMPLE.EC /S
<例2>
UAPソースファイルの名称がSAMPLEで,出力するポストソースのファイル名称をMAINにする場合
PDCPP SAMPLE.EC /O MAIN.C
-
C++言語の場合のコマンド指定例
<例1>
UAPソースファイルの名称がSAMPLEで,ポストソースを出力しない場合
PDOCC.EXE SAMPLE.ECP /S
<例2>
UAPソースファイルの名称がSAMPLEで,出力するポストソースのファイル名称をMAINにする場合
PDOCC.EXE SAMPLE.ECP /O MAIN.CPP
(c) SQLプリプロセサのリターンコード
SQLプリプロセサは,処理終了後にリターンコードをOSに返します。
リターンコードは,OSのバッチコマンドERRORLEVELで参照できます。
リターンコードとその内容を次の表に示します。
リターンコード |
内 容 |
---|---|
0 |
正常終了 |
4,8 |
エラー発生(プリプロセスを最後まで続行) |
12,16 |
エラー発生(プリプロセスを途中で終了) |
(d) エラーの出力
SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。
SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。
SQLプリプロセサの標準入出力を次の表に示します。
ファイル |
用 途 |
---|---|
標準入力 |
ファイルの入力(ユーザは使用不可) |
標準出力 |
ファイルの出力(ユーザは使用不可) |
標準エラー出力 |
エラーメッセージの出力 |
(2) COBOL言語の場合
(a) 環境変数の設定
UAPをプリプロセスする前に,必要に応じてHIRDB.INIファイルに次に示す環境変数を設定します。
なお,HIRDB.INIファイルは,%windir%ディレクトリに格納されています。
- PDCBLFIX:
-
UAPソースファイルの規定の識別子以外に,任意のファイル識別子を使用する場合に指定します。ファイル識別子は,ピリオドで始まる4文字までの任意の文字列を設定します。なお,この環境変数に設定したファイル識別子は,入力ファイルにだけ使用できます。
- PDCBLLIB:
-
SQLのCOPY文でソースファイルに引き込まれる登録集原文を検索するディレクトリを指定します。複数のディレクトリを指定する場合,ディレクトリ同士をセミコロンで区切ります。この環境変数を省略すると,カレントディレクトリだけが検索されます。
- PDCLTLANG:
-
特に文字コード種別を指定してプリプロセスする場合に指定します。省略した場合は,sjisが仮定されます。詳細については,「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。
- PDDEFAULTOPTION:
-
プリプロセスのオプションについて,省略時の動作を指定します。通常は,この環境変数を指定する必要はありません。互換モードを適用したい場合に,指定してください。詳細については,「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。
- <例>
[HiRDB] … 1 PDCBLFIX=.AAA … 2 PDCBLLIB=E:\USER\COPY … 3
<説明>
-
[HiRDB]と記述します。
-
UAPソースファイルの識別子として,.AAAも有効にします。
-
COPY文で引き込む登録集原文を検索するディレクトリ(この例ではE:\USER\COPY)を指定します。
-
(b) SQLプリプロセサの起動
SQLプリプロセサの起動は,次に示す三つの方法があります。
-
アイコンの重ね合わせによる実行
-
ファイル名の指定による実行
-
コマンドプロンプト又はMS-DOSプロンプトからの実行
-
アイコンの重ね合わせによる実行
エクスプローラでプリプロセスしたいファイルをドラッグして,プリプロセサのファイル(PDCBL.EXE(COBOL言語の場合),又はPDOCB.EXE(OOCOBOL言語の場合))に重ねると実行できます。
-
ファイル名の指定による実行
プリプロセサのアイコン(PDCBL.EXE(COBOL言語の場合),又はPDOCB.EXE(OOCOBOL言語の場合))をクリックし,次に示す手順で実行します。
-
ファイルメニューから「ファイル名を指定して実行」を選択します。
-
コマンドラインにファイル名,及びオプションを指定して実行します。
-
-
コマンドプロンプト又はMS-DOSプロンプトからの実行
コマンドプロンプト又はMS-DOSプロンプトを起動し,PDCBL.EXE(COBOL言語の場合),又はPDOCB.EXE(OOCOBOL言語の場合)コマンドを入力して実行します。
コマンドラインに入力するコマンドの形式を次に示します。
PDCBL.EXE 入力ファイル名称 [オプション[出力ファイル名称|認可識別子]]
注 OOCOBOL言語の場合,下線で示す部分をPDOCB.EXEに置き換えてください。
- 入力ファイル名称:
-
UAPソースファイルの名称を指定します。ファイル識別子は,.ECB,.COB,.CBLのどれか(COBOL言語の場合),又は.EOC(OOCOBOL言語の場合)を指定します。
- 出力ファイル名称:
-
ポストソースファイルの名称を指定します。出力ファイル名称を省略した場合,ファイル識別子は.CBL(COBOL言語の場合),又は.OCB(OOCOBOL言語の場合)を指定します。
- 認可識別子:
-
SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合,CONNECT時のユーザ識別子が仮定されます。
- オプション:
-
必要に応じて次の表に示すオプションを指定します。なお,オプションは大文字,小文字を区別しません。
表8‒13 プリプロセスオプション(Windows環境のCOBOL言語の場合) プリプロセスオプション
内容
/S
構文チェックだけをして,ポストソースを出力しない場合に指定します。このオプションを省略すると,ポストソースファイルが出力されます。なお,同時に/Xpも指定しないと,SQLプリプロセサは厳密なSQLの構文チェックができないため,SQL文に文法上のエラーが発生していても発見できない場合があるので注意が必要です。
/O ファイル名
出力するポストソースのファイル名称を変更する場合に指定します。
このオプションを省略すると,入力ファイル名称のファイル識別子を.CBL(COBOL言語の場合),又は.OCB(OOCOBOL言語の場合)に変更されたものが出力ファイル名称になります。
入力ファイルの識別子が.CBL(COBOL言語の場合),又は.OCB(OOCOBOL言語の場合)の場合,必ずこのオプションを指定して,ポストソースのファイル名称を.CBL以外(COBOL言語の場合),又は.OCB以外(OOCOBOL言語の場合)の識別子に変更してください。
/XC
次の英数字定数を囲む分離符を,引用符(")に変更する場合に指定します。
このオプションを省略すると,次の英数字定数を囲む分離符はアポストロフィ(')になります。
-
SQLプリプロセサが生成するソースコード中の英数字定数
-
SQLプリプロセサが生成するCOPY文でポストソースに引き込む登録集原文ファイル中の英数字定数
/A 認可識別子
静的SQLで認可識別子を省略した場合,及び仮定する認可識別子を変更する場合に指定します。
静的SQLとは,INSERT文,UPDATE文,DELETE文,1行SELECT文,OPEN文(形式1),CALL文,LOCK文,及びPURGE TABLE文を示します。
認可識別子を引用符(")で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため,ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は,すべての英字を大文字で指定してください。
最大30バイトの認可識別子を指定できます。
認可識別子を省略した場合に仮定する認可識別子については,マニュアル「HiRDB Version 9 SQLリファレンス」の「名前の修飾」を参照してください。
/h64
64ビットモード用のポストソースを作成する場合に指定します。ただし,32ビット版のプリプロセサを使用した場合は指定できません。
/XD
DLLを作成する場合に指定します。
DLLを作成する場合,コンパイラはCOBOL85 Version4.0 04-02以降が前提となります。/XDオプションを指定してプリプロセスしたUAPと,指定しないでプリプロセスしたUAPを混在させてアプリケーションを作成しないでください。実行時にCOBOLのランタイムライブラリでエラー(KCCBO204R-S)が発生します。
/Xe{y|n}
PREPRARE文実行時のカーソルを,自動的にクローズするかどうかを指定します。
- y:
-
カーソルを自動的にクローズするポストソースを生成します。
- n:
-
カーソルを自動的にクローズしないポストソースを生成します。
省略した場合,クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。
/XAD
X/Openに準じたAPIを使用したUAPを,DLLとして作成する場合に指定してください。
/XA
X/Openに準じたAPIを使用して,UAPを作成する場合に指定してください。
/Xo
UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき,出力方法は次のようになります。
-
SQL文中の埋込み変数は?パラメタに置換します。
-
1行SELECT文のINTO句を削除します。
-
SQL文中の語句間の空白が2文字以上の場合,空白1文字に置き換えます。
-
複数行に分割して記述しているSQLは1行にまとめます。
-
実行時にサーバに送られるSQLだけ出力します。実行されないSQL文(WHENEVER文,BEGIN DECLARE SECTIONなど)は出力しません。
-
SQLの末尾にはセミコロン(;)を付けます。
-
埋込み変数の宣言は出力しません。
-
動的SQLは,SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。
-
OPEN文は,形式1のカーソルの場合だけ,問合せ式を出力します。
-
ポストソースは生成しません。
/E2
埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。
/Xp
厳密なSQLの構文チェックをする場合に指定してください。ただし,次のUAPをプリプロセスする場合は指定しないでください。
-
XDM/RD E2接続用のUAP
-
SQL予約語削除機能を使用するUAP
-
集合演算子MINUSを使用するUAP
これらのUAPをプリプロセスするときにこのオプションを指定すると,XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。
/XU16[L|B]
COBOL2002のUnicode機能を使用する場合に指定します。COBOL2002のUnicode機能を使用したUAPの実行については,「COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。
日本語項目の文字コード(UTF-16)のバイトオーダを指定します。
- /XU16L:
-
UTF-16のバイトオーダをリトルエンディアンにします。
- /XU16B:
-
UTF-16のバイトオーダをビッグエンディアンにします。
- /XU16:
-
UTF-16のバイトオーダを,プリプロセスを実行するOSのバイトオーダにします。
-
Windows,Linuxの場合はリトルエンディアンにします。
-
AIXの場合はビッグエンディアンにします。
上記以外のOSでこのオプションを指定した場合は,プリプロセサの動作は保証できません。
-
COBOL2002のUnicode機能を使用しない場合は,このオプションを指定しないでください。指定すると,埋込み変数の宣言に日本語項目を使用できなくなります。
/Xm
複数接続機能を使用したUAPをプリプロセスする場合に指定します。詳細は,「COBOL言語で複数接続機能を使用する場合の注意事項」を参照してください。
このオプションは,省略時にも仮定されます。ただし,0904互換モードを適用した場合は仮定されませんので,オプションを指定することを検討してください。
/Xs
UAPに埋め込んだSQL文中に単純注釈(-- 〜 改行)を記述する場合に指定します。
単純注釈の記述規則については,「SQLの記述規則」の13.を参照してください。
このオプションは,省略時にも仮定されます。ただし,0904互換モードを適用した場合は仮定されませんので,オプションを指定することを検討してください。
/Xb
COBOL2002のコンパイラオプション-BigEndian,Binを使用して2進項目のバイトオーダをビッグエンディアンにする場合に指定します。詳細は,「COBOLのビッグエンディアンオプションへの対応」を参照してください。
/Xr
SQL文の実行時にCOBOLのRETURN-CODE特殊レジスタを更新しないポストソースを生成します。
UAPが呼び出し元プログラムに返すリターンコードをRETURN-CODE特殊レジスタに設定してから,呼び出し元プログラムに制御を戻すまでの間にSQL文を実行する場合,このオプションを指定してください。
省略した場合,SQL文の種類によってRETURN-CODE特殊レジスタの更新有無が変わります。SQL文の種類によるRETURN-CODE特殊レジスタの更新有無については,「SQLの記述規則」の18.を参照してください。
-
-
COBOL言語の場合のコマンド指定例
<例1>
UAPソースファイルの名称がSAMPLEで,ポストソースを出力しない場合
PDCBL SAMPLE.ECB /S
<例2>
UAPソースファイルの名称がSAMPLEで,出力するポストソースのファイル名称をMAINにする場合
PDCBL SAMPLE.ECB /O MAIN.CBL
-
OOCOBOL言語の場合のコマンド指定例
<例1>
UAPソースファイルの名称がSAMPLEで,ポストソースを出力しない場合
PDOCB.EXE SAMPLE.EOC /S
<例2>
UAPソースファイルの名称がSAMPLEで,出力するポストソースのファイル名称をMAINにする場合
PDOCB.EXE SAMPLE.EOC /O MAIN.OCB
(c) SQLプリプロセサのリターンコード
SQLプリプロセサは,処理終了後にリターンコードをOSに返します。
リターンコードは,OSのバッチコマンドERRORLEVELで参照できます。
リターンコードとその内容を次の表に示します。
リターンコード |
内 容 |
---|---|
0 |
正常終了 |
4,8 |
エラー発生(プリプロセスを最後まで続行) |
12,16 |
エラー発生(プリプロセスを途中で終了) |
(d) エラーの出力
SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。
SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。
SQLプリプロセサの標準入出力を次の表に示します。
ファイル |
用 途 |
---|---|
標準入力 |
ファイルの入力(ユーザは使用不可) |
標準出力 |
ファイルの出力(ユーザは使用不可) |
標準エラー出力 |
エラーメッセージの出力 |