8.2.2 UNIX環境でのプリプロセス
- 〈この項の構成〉
(1) C言語の場合
(a) 環境変数の設定
UAPをプリプロセスする前に,次に示す環境変数を必要に応じて設定します。
- PDDIR:
-
HiRDB(サーバ,又はクライアント)のインストールディレクトリを絶対パス名で指定します。この環境変数を設定しないと,/HiRDBが仮定されます。
なお,インストール先が/HiRDBの場合,この変数を設定する必要はありません。
- PDCLIB:
-
COPY文でソースファイルに引き込まれるヘッダファイルを検索するディレクトリを指定します。複数のディレクトリを指定する場合,ディレクトリ同士をコロンで区切ります。この環境変数を省略すると,カレントディレクトリだけが検索されます。
- LANG:
-
SQLプリプロセサは,この環境変数に設定されたロケール名から,UAPのソースファイルの文字コード種別を識別します。ただし,SQLプリプロセサがサポートしていないロケール名を指定すると,SQLプリプロセサはC(単一バイト文字コード)を指定したとみなします。UAPソースの文字コード種別を示すロケール名をSQLプリプロセサがサポートしていない場合は,LANGの代わりに環境変数PDCLTLANGを指定してください。
SQLプリプロセサがサポートしているロケール名を次の表に示します。
- (凡例)
-
−:該当する文字コード種別を示すロケール名を,SQLプリプロセサがサポートしていません。LANGの代わりにPDCLTLANGを指定してください。
- 注※
-
PDCLTLANGとLANGが共に未指定の場合,SQLプリプロセサは該当する文字コード種別を仮定します。
PDCLTLANGを指定した場合,SQLプリプロセサはLANGの指定を無視します。ただし,-Eプリプロセスオプションを指定した場合に,SQLプリプロセサが呼び出すCコンパイラの動作にLANGの指定が影響する可能性があります。Cコンパイラの正常動作のために必要な場合は,PDCLTLANGの指定有無に関わらず,LANGに適切な値を設定してください。
- PDCLTLANG:
-
UAPソースの文字コード種別をLANGで指定できない場合,及びLANGで指定した文字コード種別を無視して,ほかの文字コード種別でプリプロセスする場合に指定します。詳細については「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。
- PDDEFAULTOPTION:
-
プリプロセスのオプションについて,省略時の動作を指定します。通常は,この環境変数を指定する必要はありません。互換モードを適用したい場合に,指定してください。詳細については,「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。
- <例1>(sh(ボーンシェル)で環境設定をする場合)
-
-
prdbディレクトリがインストールディレクトリの場合
$ PDDIR="/prdb" $ export PDDIR
-
- <例2>(csh(Cシェル)で環境設定をする場合)
-
-
prdbディレクトリがインストールディレクトリの場合
% setenv PDDIR "/prdb"
-
(b) SQLプリプロセサの起動
SQLプリプロセサの起動は,pdcppコマンド(C言語の場合),又は,pdoccコマンド(C++言語の場合)を使用します。
SQLプリプロセサを起動するコマンドの入力形式を次に示します。
pdcpp 入力ファイル名称 [オプション[出力ファイル名称|認可識別子]]
注 C++言語の場合,下線で示す部分をpdoccに置き換えてください。
- 入力ファイル名称:
-
UAPソースファイルの名称を指定します。
ファイル識別子は,.ec(C言語の場合),又は.EC(C++言語の場合)にします。
- 出力ファイル名称:
-
ポストソースファイルの名称を指定します。
出力ファイル名称を省略した場合,ファイル識別子は.c(C言語の場合),又は.C(C++言語の場合)になります。
- 認可識別子:
-
SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合,CONNECT時のユーザ識別子が仮定されます。
- オプション:
-
必要に応じて次の表に示すオプションを指定します。なお,オプションは大文字,小文字を区別しません。
表8‒2 プリプロセスオプション(UNIX環境のC言語の場合) プリプロセスオプション
内容
-s
構文チェックだけをして,ポストソースを出力しない場合に指定します。このオプションを省略すると,ポストソースが出力されます。
-o ファイル名
出力するポストソースのファイル名称を指定します。
このオプションを省略すると,入力ファイル名称のファイル識別子を.c(C言語の場合),又は.C(C++言語の場合)に変更されたものが出力ファイル名称になります。
-A 認可識別子
静的SQLで認可識別子を省略した場合,及び仮定する認可識別子を変更する場合に指定します。
静的SQLとは,INSERT文,UPDATE文,DELETE文,1行SELECT文,OPEN文(形式1),CALL文,LOCK文,及びPURGE TABLE文を示します。
認可識別子を引用符(")で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため,ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は,すべての英字を大文字で指定してください。
最大30バイトの認可識別子を指定できます。
認可識別子を省略した場合に仮定する認可識別子については,マニュアル「HiRDB SQLリファレンス」の「名前の修飾」を参照してください。
-h64
64ビットモード用のポストソースを作成する場合に指定します。ただし,32ビット版のプリプロセサを使用した場合は指定できません。
long型を使用した埋込み変数の宣言はエラーになります。
-P
SQLの構文チェックをしない場合に指定します。次のどれかのUAPをプリプロセスする場合に指定できます。
-
XDM/RD E2接続用のUAP
-
SQL予約語削除機能を使用するUAP
-
集合演算子MINUSを使用するUAP
これらのUAPをプリプロセスするときにこのオプションを指定しないと,XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。
-Xo
UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき,出力方法は次のようになります。
-
SQL文中の埋込み変数は?パラメタに置換します。
-
1行SELECT文のINTO句を削除します。
-
SQL文中の語句間の空白が2文字以上の場合,空白1文字に置き換えます。
-
複数行に分割して記述しているSQLは1行にまとめます。
-
実行時にサーバに送られるSQLだけ出力します。実行されないSQL文(WHENEVER文,BEGIN DECLARE SECTIONなど)は出力しません。
-
SQLの末尾にはセミコロン(;)を付けます。
-
埋込み変数の宣言は出力しません。
-
動的SQLは,SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。
-
OPEN文は,形式1のカーソルの場合だけ,問合せ式を出力します。
-
ポストソースは生成しません。
-Xe{y|n}
PREPRARE文実行時のカーソルを,自動的にクローズするかどうかを指定します。
- y:
-
カーソルを自動的にクローズするポストソースを生成します。
- n:
-
カーソルを自動的にクローズしないポストソースを生成します。
省略した場合,クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。
-Xv
-E2オプションを指定した場合に,VARCHAR型,及びBINARY型に対応する構造体を,通常の構造体として解析するときに指定します。VARCHAR型,及びBINARY型に対応する埋込み変数を宣言するためには,SQL TYPE IS〜を使用します。このオプションは,-E2オプションと同時に指定する必要があります。なお,繰返し列のマクロを使用している場合,このオプションを指定しないでください。
-E{1|2|3}["オプション文字列"]
UAP中で使用しているプリプロセサ宣言文の有効化と,埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。なお,このオプションはpdoccでは無効となります。
- -E1:
-
プリプロセサ宣言文の有効化を指定します。
- -E2:
-
埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。また,ポインタでの埋込み変数指定,及び構造体の参照を使用する場合にも指定します。
- -E3:
-
-E1と-E2の両方を指定します。
- "オプション文字列":
-
インクルードするファイルを検索するディレクトリのパス名を,Cコンパイラに指定する-Iオプションの形式で指定します。オプション文字列に複数のオプションを記述する場合は,セミコロンで区切ってください。また,任意のCコンパイラも指定できます。なお,-E2オプション指定時には無視されます。
- ≪留意事項≫
-
-
-E1又は-E3を指定すると,内部的にCコンパイラが呼び出されるため,PATH環境変数にコンパイラへのパス名を設定しておく必要があります。
-
-E1又は-E3を指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。
-
-E1又は-E3を指定し,UAPソースファイル中でSQLのCOPY文を使用する場合は,-Ecオプションを同時に指定する必要があります。
SQLで指定するキーワード及び使用するCコンパイラの解析方法によっては,作成したポストソースのコンパイル時にエラーが発生するおそれがあります。この場合,COPY文の使用有無に関係なく,Ecオプションを同時に指定することで,コンパイル時のエラーを回避できることがあります。
例えば,SQLのキーワードにNULLを指定し,RHEL8又はRHEL9のgccコンパイラを使用してプリプロセスする場合,-Ecオプションを追加で指定する必要があります。-Ecオプションを指定しないと,コンパイル時に「不明な型名'EXEC'です」というエラーが表示されます。
-
-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)に準拠します。
省略した場合,-gc99が仮定されます。
-E2,-E3オプションを指定しない場合,このオプションを指定しても無視されます。
-Ec
-E1又は-E3オプションを指定した場合に,UAPソースファイル中でSQLのCOPY文を使用できるようにします。
なお,それ以外の場合,このオプションの指定に関係なくCOPY文は使用できます(このオプションの指定は無視されます)。
- ≪留意事項≫
-
-
このオプションを指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。
-
SQLのCOPY文の使用有無に関係なく,-Ecオプションを指定することで,プリプロセス時に発生する問題を回避できることがあります。詳細は-Eオプションの説明を参照してください。
-
-Xs
UAPに埋め込んだSQL文中に単純注釈(-- 〜 改行)を記述する場合に指定します。
単純注釈の記述規則については,「SQLの記述規則」の10.を参照してください。
このオプションは,省略時にも仮定されます。ただし,0904互換モードを適用した場合は仮定されませんので,オプションを指定することを検討してください。
- 注1
-
-Eオプション指定時に使用できる機能を次に示します。
機能
省略
-E1
-E2
-E3
#defineで定義したマクロを有効にする
×
○
×
○
#includeでインクルードしたヘッダファイルを有効にする※
×
○
×
○
#if,#ifdefなどの条件コンパイルを有効にする
×
○
×
○
UAP中の任意の場所で宣言した変数を,埋込み変数として使用する
×
×
○
○
構造体を埋込み変数として使用する
×
×
○
○
ポインタを埋込み変数として使用する
×
×
○
○
- (凡例)
-
○:該当する機能を使用できます。
×:該当する機能は使用できません。
- 注※
-
ヘッダファイル中に記述できる項目については,「SQLの記述規則」の23.を参照してください。
- 注2
-
-Eオプションを指定した場合,プリプロセサはCコンパイラを内部的に呼び出します。プラットフォームごとのCコンパイラを次に示します。
プラットフォーム
コンパイラの種類
呼び出し時のロード名
AIX
C for AIXコンパイラ
xlc
Linux
gccコンパイラ
gcc
Windows
Microsoft Visual C++コンパイラ
CL.EXE
これ以外のCコンパイラを使用する場合は,オプション文字列の先頭に,コンパイラのロードのディレクトリを含めた絶対パス名で指定します。ディレクトリ名,及びロード名には,空白及びセミコロンを含めることはできません。環境変数PATHにパス名を追加している場合は,絶対パス名でなくてもかまいません。
ロード名を指定する場合は,ロード名とオプションの間をセミコロンで区切ってください。
使用するコンパイラは,-Cオプションと-Eオプションをサポートしている必要があります。プリプロセサは,#define,#includeなどの擬似命令を処理するために,内部的にCコンパイラに対して-Cオプション,及び-Eオプションを指定して,作業用の一時ファイルを作成します。Linuxでは,-Cオプション,及び-Eオプションのほかに,-xcオプションを使用しています。
それ以外のオプション文字列に指定できるオプションは,使用するコンパイラの仕様に依存しますが,-Cオプション又は-Eオプションに背反するオプションを指定すると,プリプロセサはエラーとなります。ヘルプなどを表示するオプションを使用した場合は,動作が保証されません。
例を次に示します。
例1:デフォルトのCコンパイラを使用する場合
pdcpp connect.ec -E1"-I$PDDIR/include;-DDEBUG"
例2:ユーザ指定のCコンパイラを使用する場合
pdcpp connect.ec -E1"/usr/bin/gcc;-I$PDDIR/include;-DDEBUG"
-E2,-E3オプションを指定すると,プリプロセサはUAP中の任意の箇所で宣言されている埋込み変数を認識するために,-gオプションで指定,又は仮定されたCの標準規格(C89又はC99)に準拠して構文を解析します。
構文解析の対象ファイルとプリプロセスオプションの関係を次の表に示します。
表8‒3 構文解析の対象ファイルとプリプロセスオプションの関係 項番
構文解析の対象となるファイル
プリプロセスオプション
-E2
-E3
-E2及び-E3の指定なし
1
UAPソースファイル
○
○
×※
2
COPY文で引き込むヘッダファイル
○
○
×※
3
#includeで引き込むヘッダファイル
×
○
×
- (凡例)
-
○:構文解析します。
×:構文解析しません。
- 注※
-
選択した規格に準拠した構文解析はしないで,埋込みSQL宣言節の中だけを埋込み変数のデータ記述形式に合わせて解析します。
なお,構文解析の対象ファイルの中で選択した規格に準拠しない構文が使用されている場合,構文エラーになることがあります。
構文エラーを回避するには,構文解析の対象ファイルの中で選択した規格に準拠した構文を使用するようにします。コンパイラ製品に付属しているヘッダファイル中で選択した規格に準拠しない構文が使用されているために構文エラーになる場合は,選択した規格に準拠したコンパイルをするコンパイラオプションを-E3オプション文字列に指定することで,問題を回避できることがあります。
例3:IBM XL C V9.0を使う場合に,C89準拠オプション(-qlanglvl=extc89)を指定する場合
pdcpp connect.ec -E3"-qlanglvl=extc89;-I$PDDIR/include" -gc89
- 注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オプションの指定内容
予約語として使用する
-gオプションを省略,又は-gc99を指定します。
識別子として使用する
-gc89を指定します。
予約語としても識別子としても使用しない
-gオプションを指定する必要はありません。コメントとして任意に指定できます。
-gオプションを指定する場合は,次の点に注意してください。
-
C99に準拠したコンパイルができるコンパイラ製品を使用する場合,コンパイラ製品に付属しているヘッダファイルの中で,C99で追加された予約語が予約語として使用されていることがあります。-E3オプションを指定すると,そのヘッダファイルが#include文で引き込まれるおそれがあります。
-
コンパイラ製品の中には,予約語の扱いを個別に指定できるものがあります(例えば,restrictは予約語とし,inlineは予約語としない,と指定できます)。SQLプリプロセサは予約語の扱いを個別に指定できません。
なお,UNIX環境では,トラブルを避けるためコンパイラが準拠する標準規格と同じ標準規格を-gオプションで指定することを推奨します。また,C99で追加された予約語の扱いを個別に指定するコンパイラオプションは指定しないでください。
- 注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 sample.EC -s
<例2>
UAPソースファイルの名称がsampleで,出力するポストソースのファイル名称をmainにする場合
pdocc sample.EC -o main.C
(c) SQLプリプロセサのリターンコード
SQLプリプロセサは,処理終了後にリターンコードをOSに返します。
リターンコードは,シェル変数$?(ボーンシェルの場合),又は$status(Cシェルの場合)の内容を表示させることで参照できます。
リターンコードとその内容を次の表に示します。
リターンコード |
内 容 |
---|---|
0 |
正常終了 |
4,8 |
エラー発生(プリプロセスを最後まで続行) |
12,16 |
エラー発生(プリプロセスを途中で終了) |
(d) エラーの出力
SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。
SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。
SQLプリプロセサの標準入出力を次の表に示します。
ファイル |
用 途 |
---|---|
標準入力 |
ファイルの入力(ユーザは使用不可) |
標準出力 |
ファイルの出力(ユーザは使用不可) |
標準エラー出力 |
エラーメッセージの出力 |
(2) COBOL言語の場合
(a) 環境変数の設定
UAPをプリプロセスする前に,次に示す環境変数を必要に応じて設定します。
- PDDIR:
-
HiRDB(サーバ,又はクライアント)のインストールディレクトリを絶対パス名で指定します。この環境変数を設定しないと,/HiRDBが仮定されます。
なお,インストール先が/HiRDBの場合,この変数を設定する必要はありません。
- PDCBLFIX:
-
UAPソースファイルの規定の識別子以外に,任意のファイル識別子を使用する場合に指定します。
ファイル識別子は,ピリオドで始まる4文字までの任意の文字列を設定します。なお,この環境変数に設定したファイル識別子は,入力ファイルにだけ使用できます。
- PDCBLLIB:
-
SQLのCOPY文でソースファイルに引き込まれる登録集原文を検索するディレクトリを指定します。複数のディレクトリを指定する場合,ディレクトリ同士をコロンで区切ります。この環境変数を省略すると,カレントディレクトリだけが検索されます。
- LANG:
-
SQLプリプロセサは,この環境変数に設定されたロケール名から,UAPのソースファイルの文字コード種別を識別します。ただし,SQLプリプロセサがサポートしていないロケール名を指定すると,SQLプリプロセサはC(単一バイト文字コード)を指定したとみなします。UAPソースの文字コード種別を示すロケール名をSQLプリプロセサがサポートしていない場合は,LANGの代わりに環境変数PDCLTLANGを指定してください。
SQLプリプロセサがサポートしているロケール名については,表「SQLプリプロセサがサポートしているロケール名」を参照してください。
PDCLTLANGを指定した場合,SQLプリプロセサはLANGの指定を無視します。
- PDCLTLANG:
-
UAPソースの文字コード種別をLANGで指定できない場合,及びLANGで指定した文字コード種別を無視して,ほかの文字コード種別でプリプロセスする場合に指定します。詳細については「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。
- PDDEFAULTOPTION:
-
プリプロセスのオプションについて,省略時の動作を指定します。通常は,この環境変数を指定する必要はありません。互換モードを適用したい場合に,指定してください。詳細については,「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。
- <例1>(sh(ボーンシェル)で環境設定をする場合)
$ PDDIR="/prdb" … 1 $ PDCBLFIX=".Cob" … 2 $ PDCBLLIB=$HOME/cobol/include:$HOME/cobol/source … 3 $ export PDDIR PDCBLFIX PDCBLLIB … 4
<説明>
-
インストールディレクトリ(この例では/prdb)を指定します。
-
UAPソースファイルの識別子として,.Cobも有効にします。
-
登録集原文を検索するディレクトリ(この例では$HOME/cobol/include,及び$HOME/cobol/source)を指定します。
-
SQLプリプロセサで参照できるようにします。
-
- <例2>(csh(Cシェル)で環境設定をする場合)
% setenv PDDIR "/prdb" … 1 % setenv PDCBLFIX ".Cob" … 2 % setenv PDCBLLIB $HOME/cobol/include:$HOME/cobol/source … 3
<説明>
-
インストールディレクトリ(この例では/prdb)を指定します。
-
UAPソースファイルの識別子として,.Cobも有効にします。
-
登録集原文を検索するディレクトリ(この例では$HOME/cobol/include,及び$HOME/cobol/source)を指定します。
-
(b) SQLプリプロセサの起動
SQLプリプロセサの起動は,pdcblコマンド(COBOL言語の場合),又はpdocbコマンド(OOCOBOL言語の場合)を使用します。
SQLプリプロセサを起動するコマンドの入力形式を次に示します。
pdcbl 入力ファイル名称 [オプション[出力ファイル名称|認可識別子]]
注 OOCOBOL言語の場合,下線で示す部分をpdocbに置き換えてください。
- 入力ファイル名称:
-
UAPソースファイルの名称を指定します。
ファイル識別子は,.ecb,.cob,.cblのどれか(COBOL言語の場合),又は.eoc(OOCOBOL言語の場合)にします。
なお,環境設定で任意のファイル識別子を登録してある場合,その識別子を使用することもできます。
- 出力ファイル名称:
-
ポストソースファイルの名称を指定します。
出力ファイル名称を省略した場合,ファイル識別子は.cbl(COBOL言語の場合),又は.ocb(OOCOBOL言語の場合)になります。
- 認可識別子:
-
SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合,CONNECT時のユーザ識別子が仮定されます。
- オプション:
-
必要に応じて次の表に示すオプションを指定します。なお,オプションは大文字,小文字を区別しません。
表8‒6 プリプロセスオプション(UNIX環境のCOBOL言語の場合) プリプロセスオプション
内容
-s
構文チェックだけをして,ポストソースを出力しない場合に指定します。このオプションを省略すると,ポストソースが出力されます。
-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 SQLリファレンス」の「名前の修飾」を参照してください。
-h64
64ビットモード用のポストソースを作成する場合に指定します。ただし,32ビット版のプリプロセサを使用した場合は指定できません。
-P
SQLの構文チェックをしない場合に指定します。次のどれかのUAPをプリプロセスする場合に指定できます。
-
XDM/RD E2接続用のUAP
-
SQL予約語削除機能を使用するUAP
-
集合演算子MINUSを使用するUAP
これらのUAPをプリプロセスするときにこのオプションを指定しないと,XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。
-Xo
UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき,出力方法は次のようになります。
-
SQL文中の埋込み変数は?パラメタに置換します。
-
1行SELECT文のINTO句を削除します。
-
SQL文中の語句間の空白が2文字以上の場合,空白1文字に置き換えます。
-
複数行に分割して記述しているSQLは1行にまとめます。
-
実行時にサーバに送られるSQLだけ出力します。実行されないSQL文(WHENEVER文,BEGIN DECLARE SECTIONなど)は出力しません。
-
SQLの末尾にはセミコロン(;)を付けます。
-
埋込み変数の宣言は出力しません。
-
動的SQLは,SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。
-
OPEN文は,形式1のカーソルの場合だけ,問合せ式を出力します。
-
ポストソースは生成しません。
-Xe{y|n}
PREPRARE文実行時のカーソルを,自動的にクローズするかどうかを指定します。
- y:
-
カーソルを自動的にクローズするポストソースを生成します。
- n:
-
カーソルを自動的にクローズしないポストソースを生成します。
省略した場合,クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。
-E2
埋込み変数を埋込み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
Linux環境で,COBOL2002のコンパイラオプション-BigEndian,Binを使用して2進項目のバイトオーダをビッグエンディアンにする場合に指定します。詳細は,「COBOLのビッグエンディアンオプションへの対応」を参照してください。
Linux以外のUNIX環境では,このオプションを指定できません。
-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 sample.eoc -s
<例2>
UAPソースファイルの名称がsampleで,出力するポストソースのファイル名称をmainにする場合
pdocb sample.eoc -o main.ocb
(c) SQLプリプロセサのリターンコード
SQLプリプロセサは,処理終了後にリターンコードをOSに返します。
リターンコードは,シェル変数$?(ボーンシェルの場合),又は$status(Cシェルの場合)の内容を表示させることで参照できます。
リターンコードとその内容を次の表に示します。
リターンコード |
内 容 |
---|---|
0 |
正常終了 |
4,8 |
エラー発生(プリプロセスを最後まで続行) |
12,16 |
エラー発生(プリプロセスを途中で終了) |
(d) エラーの出力
SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。
SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。
SQLプリプロセサの標準入出力を次の表に示します。
ファイル |
用 途 |
---|---|
標準入力 |
ファイルの入力(ユーザは使用不可) |
標準出力 |
ファイルの出力(ユーザは使用不可) |
標準エラー出力 |
エラーメッセージの出力 |