スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
![[目次]](FIGURE/CONTENT.GIF)
![[索引]](FIGURE/INDEX.GIF)
![[前へ]](FIGURE/FRONT.GIF)
8.2.3 Windows環境でのプリプロセス
(a) 環境変数の設定
UAPをプリプロセスする前に,必要に応じてHiRDB.INIファイルに次に示す環境変数を設定します。
なお,HiRDB.INIファイルは,%windir%ディレクトリに格納されています。
- PDCLTLANG:
- 特に文字コード種別を指定してプリプロセスする場合に指定します。省略した場合は,sjisが仮定されます。詳細については,「6.6.4 クライアント環境定義の設定内容」のPDCLTLANGオペランドを参照してください。
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-8 プリプロセスオプション(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文を示します。 |
| /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オプションを指定すると,内部的にCコンパイラが呼び出されるため,PATH環境変数にコンパイラへのパス名を設定しておく必要があります。 |
| /Xp |
厳密なSQLの構文チェックをする場合に指定してください。ただし,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オプションを指定しない場合,このオプションを指定しても無視されます。 |
- 注1
- /Eオプション指定時に使用できる機能を次に示します。
| 機能 |
省略 |
/E1 |
/E2 |
/E3 |
| #defineで定義したマクロを有効にする |
× |
○ |
× |
○ |
| #includeでインクルードしたヘッダファイルを有効にする |
× |
○ |
× |
○ |
| #if,#ifdefなどの条件コンパイルを有効にする |
× |
○ |
× |
○ |
| UAP中の任意の場所で宣言した変数を,埋込み変数として使用する |
× |
× |
○ |
○ |
| 構造体を埋込み変数として使用する |
× |
× |
○ |
○ |
| ポインタを埋込み変数として使用する |
× |
× |
○ |
○ |
- (凡例)
- ○:該当する機能を使用できます。
- ×:該当する機能は使用できません。
- 注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)に準拠して構文を解析します。そのため,次の場合に構文エラーになることがあります。
- /E2,/E3オプションを指定し,UAPソースファイル中で選択した規格に準拠しない構文が使用されている場合
- /E3オプションを指定し,#include文で取り込んだヘッダファイル中で選択した規格に準拠しない構文が使用されている場合
- 構文エラーを回避するには,UAPソースファイルとヘッダファイル中で選択した規格に準拠した構文を使用するようにします。コンパイラ製品に付属しているヘッダファイル中で選択した規格に準拠しない構文が使用されているために構文エラーになる場合は,選択した規格に準拠したコンパイルをするコンパイラオプションを/E3オプション文字列に指定することで,問題を回避できることがあります。
- 注3
- インクルードしたヘッダファイルの中には,SQL文とSQL TYPE IS〜型の変数宣言を記述できません。プリプロセサは,ヘッダファイルの中にSQL文又はSQL TYPE IS〜型の変数宣言を見付けると,エラーメッセージを表示して処理を続行しますが,ポストソースは生成されません。/E1オプション指定時に,ヘッダファイルに埋込み変数宣言節を記述しても無効となります。ヘッダファイルの中で定義した変数を埋込み変数として使用する場合は,/E3オプションを指定してください。ただし,この場合でも,SQL TYPE IS〜型の変数宣言はインクルードファイルに記述できません。
- 注4
- 埋込み変数の宣言に文字集合名UTF16を指定した場合に,SQLプリプロセサは文字集合名記述領域に文字集合名を設定するソースコードをポストソース中に展開します。そのソースコードは,/XU16オプションの指定に依存して,リトルエンディアンの場合にはUTF-16LEを設定し,ビッグエンディアンの場合にはUTF-16BEを設定します。
- 埋込み変数を使用しないで,SQL記述領域と文字集合名記述領域を使用してUAP実行時に入出力変数の文字集合名を動的に決定する場合には,/XU16オプションで指定したバイトオーダは無効になります。この場合に,文字集合名をUTF16にするとバイトオーダがビッグエンディアンになります。
- 注5
- /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 *変数名;
- 注6
- /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プリプロセサは予約語の扱いを個別に指定できません。
- 注7
- /E2,/E3オプションを指定しない場合,埋込みSQL宣言節で,C99で追加された予約語を識別子として扱います。また,埋込みSQL宣言節とSQL文(EXEC SQL 〜 ;)以外は解析しません。
- 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で参照できます。
リターンコードとその内容を次の表に示します。
表8-9 SQLプリプロセサのリターンコード(Windows環境でのC言語の場合)
| リターンコード |
内 容 |
| 0 |
正常終了 |
| 4,8 |
エラー発生(プリプロセスを最後まで続行) |
| 12,16 |
エラー発生(プリプロセスを途中で終了) |
(d) エラーの出力
SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。
SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。
SQLプリプロセサの標準入出力を次の表に示します。
表8-10 SQLプリプロセサの標準入出力(Windows環境でのC言語の場合)
| ファイル |
用 途 |
| 標準入力 |
ファイルの入力(ユーザは使用不可) |
| 標準出力 |
ファイルの出力(ユーザは使用不可) |
| 標準エラー出力 |
エラーメッセージの出力 |
(a) 環境変数の設定
UAPをプリプロセスする前に,必要に応じてHIRDB.INIファイルに次に示す環境変数を設定します。
なお,HIRDB.INIファイルは,%windir%ディレクトリに格納されています。
- PDCBLFIX:
- UAPソースファイルの規定の識別子以外に,任意のファイル識別子を使用する場合に指定します。ファイル識別子は,ピリオドで始まる4文字までの任意の文字列を設定します。なお,この環境変数に設定したファイル識別子は,入力ファイルにだけ使用できます。
- PDCBLLIB:
- COPY文でソースファイルに引き込まれる登録原文を検索するディレクトリを指定します。複数のディレクトリを指定する場合,ディレクトリ同士をセミコロンで区切ります。この環境変数を省略すると,カレントディレクトリだけが検索されます。
- PDCLTLANG:
- 特に文字コード種別を指定してプリプロセスする場合に指定します。省略した場合は,sjisが仮定されます。詳細については,「6.6.4 クライアント環境定義の設定内容」のPDCLTLANGオペランドを参照してください。
- <例>
[HiRDB] … 1
PDCBLFIX=.AAA … 2
PDCBLLIB=E:\USER\COPY … 3
- <説明>
- [HiRDB]と記述します。
- UAPソースファイルの識別子として,.AAAも有効にします。
- COPY文で引き込む登録原文を検索するディレクトリ(この例ではE:\USER\COPY)を指定します。
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-11 プリプロセスオプション(Windows環境のCOBOL言語の場合)
| プリプロセスオプション |
内容 |
| /S |
構文チェックだけをして,ポストソースを出力しない場合に指定します。このオプションを省略すると,ポストソースファイルが出力されます。なお,同時に/Xpも指定しないと,SQLプリプロセサは厳密なSQLの構文チェックができないため,SQL文に文法上のエラーが発生していても発見できない場合があるので注意が必要です。 |
| /O ファイル名 |
出力するポストソースのファイル名称を変更する場合に指定します。
このオプションを省略すると,入力ファイル名称のファイル識別子を.CBL(COBOL言語の場合),又は.OCB(OOCOBOL言語の場合)に変更されたものが出力ファイル名称になります。
入力ファイルの識別子が.CBL(COBOL言語の場合),又は.OCB(OOCOBOL言語の場合)の場合,必ずこのオプションを指定して,ポストソースのファイル名称を.CBL以外(COBOL言語の場合),又は.OCB以外(OOCOBOL言語の場合)の識別子に変更してください。 |
| /XC |
SQLプリプロセサが生成する文字列の囲みを引用符にする場合に指定します。このオプションを省略すると,囲みはアポストロフィになります。 |
| /A 認可識別子 |
静的SQLで認可識別子を省略した場合,及び仮定する認可識別子を変更する場合に指定します。
静的SQLとは,INSERT文,UPDATE文,DELETE文,1行SELECT文,OPEN文(形式1),CALL文,LOCK文,及びPURGE TABLE文を示します。 |
| /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の構文チェックをする場合に指定してください。ただし,SQL予約語削除機能を使用する場合は指定しないでください。 |
| /XU16[L|B] |
COBOL2002のUnicode機能を使用する場合に指定します。COBOL2002のUnicode機能を使用したUAPの実行については,「8.4.3 COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。
日本語項目の文字コード(UTF-16)のバイトオーダを指定します。
- /XU16L:
- UTF-16のバイトオーダをリトルエンディアンにします。
- /XU16B:
- UTF-16のバイトオーダをビッグエンディアンにします。
- /XU16:
- UTF-16のバイトオーダを,プリプロセスを実行するOSのバイトオーダにします。
- Windows,Linuxの場合はリトルエンディアンにします。
- AIXの場合はビッグエンディアンにします。
- 上記以外のOSでこのオプションを指定した場合は,プリプロセサの動作は保証できません。
COBOL2002のUnicode機能を使用しない場合は,このオプションを指定しないでください。指定すると,埋込み変数の宣言に日本語項目を使用できなくなります。 |
- 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で参照できます。
リターンコードとその内容を次の表に示します。
表8-12 SQLプリプロセサのリターンコード(Windows環境でのCOBOL言語の場合)
| リターンコード |
内 容 |
| 0 |
正常終了 |
| 4,8 |
エラー発生(プリプロセスを最後まで続行) |
| 12,16 |
エラー発生(プリプロセスを途中で終了) |
(d) エラーの出力
SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。
SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。
SQLプリプロセサの標準入出力を次の表に示します。
表8-13 SQLプリプロセサの標準入出力(Windows環境でのCOBOL言語の場合)
| ファイル |
用 途 |
| 標準入力 |
ファイルの入力(ユーザは使用不可) |
| 標準出力 |
ファイルの出力(ユーザは使用不可) |
| 標準エラー出力 |
エラーメッセージの出力 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.