スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

8.2.2 UNIX環境でのプリプロセス

<この項の構成>
(1) C言語の場合
(2) COBOL言語の場合

(1) C言語の場合

(a) 環境変数の設定

UAPをプリプロセスする前に,次に示す環境変数を必要に応じて設定します。

PDDIR:
HiRDB(サーバ,又はクライアント)のインストールディレクトリを絶対パス名で指定します。この環境変数を設定しないと,/HiRDBが仮定されます。
なお,インストール先が/HiRDBの場合,この変数を設定する必要はありません。

LANG:
HiRDBクライアント環境の文字コード種別を設定します。
SQLプリプロセサは,この環境変数に設定されたロケール名から,UAPのソースファイルの文字コード種別を識別します。ただし,SQLプリプロセサがサポートしていないロケール名を指定すると,SQLプリプロセサはC(単一バイト文字コード)を指定したとみなします。UAPソースの文字コード種別を示すロケール名をSQLプリプロセサがサポートしていない場合は,LANGの代わりに環境変数PDCLTLANGを指定してください。
SQLプリプロセサがサポートしているロケール名を次の表に示します。

表8-1 SQLプリプロセサがサポートしているロケール名

UAPソースの文字コード種別 環境変数LANGに設定するロケール名
HP-UX Solaris AIX Linux
シフトJIS
漢字コード
ja_JP.SJIS又は未指定 ja_JP.PCK Ja_JP又は未指定
EUC中国語
漢字コード
EUC日本語
漢字コード
ja_JP.eucJP ja又は未指定 ja_JP ja_JP.eucJP,ja_JP,ja_JP.ujis又は未指定
単一バイト
文字コード
C C C C
Unicode(UTF-8)
中国語漢字コード
(GB18030)

(凡例)
−:該当する文字コード種別を示すロケール名を,SQLプリプロセサがサポートしていません。LANGの代わりにPDCLTLANGを指定してください。

注※
PDCLTLANGとLANGが共に未指定の場合,SQLプリプロセサは該当する文字コード種別を仮定します。
PDCLTLANGを指定した場合,SQLプリプロセサはLANGの指定を無視します。ただし,-Eプリプロセスオプションを指定した場合に,SQLプリプロセサが呼び出すCコンパイラの動作にLANGの指定が影響する可能性があります。Cコンパイラの正常動作のために必要な場合は,PDCLTLANGの指定有無に関わらず,LANGに適切な値を設定してください。

PDCLTLANG:
UAPソースの文字コード種別をLANGで指定できない場合,及びLANGで指定した文字コード種別を無視して,ほかの文字コード種別でプリプロセスする場合に指定します。詳細については「6.6.4 クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。

 

<例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文を示します。
-h64 64ビットモード用のポストソースを作成する場合に指定します。ただし,32ビット版のプリプロセサを使用した場合は指定できません。
long型を使用した埋込み変数の宣言はエラーになります。
-P SQLの構文チェックをしない場合に指定します。次のどちらかのUAPをプリプロセスする場合に指定できます。
  • XDM/RD E2接続用のUAP
  • SQL予約語削除機能を使用するUAP
このオプションを指定しない場合,SQL予約語削除機能で削除対象とした予約語や,XDM/RD E2で使用できる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オプションを指定すると,内部的にCコンパイラが呼び出されるため,PATH環境変数にコンパイラへのパス名を設定しておく必要があります。
-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オプションを指定しない場合,このオプションを指定しても無視されます。
注1
-Eオプション指定時に使用できる機能を次に示します。
機能 省略 -E1 -E2 -E3
#defineで定義したマクロを有効にする × ×
#includeでインクルードしたヘッダファイルを有効にする × ×
#if,#ifdefなどの条件コンパイルを有効にする × ×
UAP中の任意の場所で宣言した変数を,埋込み変数として使用する × ×
構造体を埋込み変数として使用する × ×
ポインタを埋込み変数として使用する × ×
(凡例)
○:該当する機能を使用できます。
×:該当する機能は使用できません。
注2
-Eオプションを指定した場合,プリプロセサはCコンパイラを内部的に呼び出します。プラットフォームごとのCコンパイラを次に示します。
プラットフォーム コンパイラの種類 呼び出し時のロード名
HP-UX HP-Cコンパイラ cc
Solaris SUN Workshopコンパイラ cc
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オプションを使用しています。また,Solarisでは,ほかに-Xsオプションを使用しています。
それ以外のオプション文字列に指定できるオプションは,使用するコンパイラの仕様に依存しますが,-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)に準拠して構文を解析します。そのため,次の場合に構文エラーになることがあります。
  • -E2,-E3オプションを指定し,UAPソースファイル中で選択した規格に準拠しない構文が使用されている場合
  • -E3オプションを指定し,#include文で取り込んだヘッダファイル中で選択した規格に準拠しない構文が使用されている場合
構文エラーを回避するには,UAPソースファイルとヘッダファイル中で選択した規格に準拠した構文を使用するようにします。コンパイラ製品に付属しているヘッダファイル中で選択した規格に準拠しない構文が使用されているために構文エラーになる場合は,選択した規格に準拠したコンパイルをするコンパイラオプションを-E3オプション文字列に指定することで,問題を回避できることがあります。
例3:IBM XL C V9.0を使う場合に,C89準拠オプション(-qlanglvl=extc89)を指定する場合
 
pdcpp connect.ec -E3"-qlanglvl=extc89;-I$PDDIR/include" -gc89
 
注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オプションの指定内容
予約語として使用する -gオプションを省略,又は-gc99を指定します。
識別子として使用する -gc89を指定します。
予約語としても識別子としても使用しない -gオプションを指定する必要はありません。コメントとして任意に指定できます。
-gオプションを指定する場合は,次の点に注意してください。
  • C99に準拠したコンパイルができるコンパイラ製品を使用する場合,コンパイラ製品に付属しているヘッダファイルの中で,C99で追加された予約語が予約語として使用されていることがあります。-E3オプションを指定すると,そのヘッダファイルが#include文で取り込まれるおそれがあります。
  • コンパイラ製品の中には,予約語の扱いを個別に指定できるものがあります(例えば,restrictは予約語とし,inlineは予約語としない,と指定できます)。SQLプリプロセサは予約語の扱いを個別に指定できません。
なお,UNIX環境では,トラブルを避けるためコンパイラが準拠する標準規格と同じ標準規格を-gオプションで指定することを推奨します。また,C99で追加された予約語の扱いを個別に指定するコンパイラオプションは指定しないでください。
注7
-E2,-E3オプションを指定しない場合,埋込みSQL宣言節で,C99で追加された予約語を識別子として扱います。また,埋込みSQL宣言節とSQL文(EXEC SQL 〜 ;)以外は解析しません。

 

  1. C言語の場合のコマンド指定例
    <例1>
    UAPソースファイルの名称がsampleで,ポストソースを出力しない場合
      
      pdcpp sample.ec -s
      
    <例2>
    UAPソースファイルの名称がsampleで,出力するポストソースのファイル名称をmainにする場合
      
      pdcpp sample.ec -o main.c
      
  2. C++言語の場合のコマンド指定例
    <例1>
    UAPソースファイルの名称がsampleで,ポストソースを出力しない場合
      
      pdocc sample.EC -s
      
    <例2>
    UAPソースファイルの名称がsampleで,出力するポストソースのファイル名称をmainにする場合
      
      pdocc sample.EC -o main.C
      
(c) SQLプリプロセサのリターンコード

SQLプリプロセサは,処理終了後にリターンコードをOSに返します。

リターンコードは,シェル変数$?(ボーンシェルの場合),又は$status(Cシェルの場合)の内容を表示させることで参照できます。

リターンコードとその内容を次の表に示します。

表8-3 SQLプリプロセサのリターンコード(UNIX環境でのC言語の場合)

リターンコード 内     容
0 正常終了
4,8 エラー発生(プリプロセスを最後まで続行)
12,16 エラー発生(プリプロセスを途中で終了)
(d) エラーの出力

SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。

SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。

SQLプリプロセサの標準入出力を次の表に示します。

表8-4 SQLプリプロセサの標準入出力(UNIX環境でのC言語の場合)

ファイル 用     途
標準入力 ファイルの入力(ユーザは使用不可)
標準出力 ファイルの出力(ユーザは使用不可)
標準エラー出力 エラーメッセージの出力

(2) COBOL言語の場合

(a) 環境変数の設定

UAPをプリプロセスする前に,次に示す環境変数を必要に応じて設定します。

PDDIR:
HiRDB(サーバ,又はクライアント)のインストールディレクトリを絶対パス名で指定します。この環境変数を設定しないと,/HiRDBが仮定されます。
なお,インストール先が/HiRDBの場合,この変数を設定する必要はありません。

PDCBLFIX:
UAPソースファイルの規定の識別子以外に,任意のファイル識別子を使用する場合に指定します。
ファイル識別子は,ピリオドで始まる4文字までの任意の文字列を設定します。なお,この環境変数に設定したファイル識別子は,入力ファイルにだけ使用できます。

PDCBLLIB:
SQLのCOPY文でソースファイルに引き込まれる登録原文を検索するディレクトリを指定します。複数のディレクトリを指定する場合,ディレクトリ同士をコロンで区切ります。この環境変数を省略すると,カレントディレクトリだけが検索されます。

LANG:
HiRDBクライアント環境の文字コード種別を設定します。
SQLプリプロセサは,この環境変数に設定されたロケール名から,UAPのソースファイルの文字コード種別を識別します。ただし,SQLプリプロセサがサポートしていないロケール名を指定すると,SQLプリプロセサはC(単一バイト文字コード)を指定したとみなします。UAPソースの文字コード種別を示すロケール名をSQLプリプロセサがサポートしていない場合は,LANGの代わりに環境変数PDCLTLANGを指定してください。
SQLプリプロセサがサポートしているロケール名については,表8-1を参照してください。
PDCLTLANGを指定した場合,SQLプリプロセサはLANGの指定を無視します。

PDCLTLANG:
UAPソースの文字コード種別をLANGで指定できない場合,及びLANGで指定した文字コード種別を無視して,ほかの文字コード種別でプリプロセスする場合に指定します。詳細については「6.6.4 クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。

 

<例1>(sh(ボーンシェル)で環境設定をする場合)
  
  $ PDDIR="/prdb"                                   … 1
  $ PDCBLFIX=".Cob"                                 … 2
  $ PDCBLLIB=$HOME/cobol/include:$HOME/cobol/source … 3
  $ export PDDIR PDCBLFIX PDCBLLIB                  … 4
  
<説明>
  1. インストールディレクトリ(この例では/prdb)を指定します。
  2. UAPソースファイルの識別子として,.Cobも有効にします。
  3. 登録原文を検索するディレクトリ(この例では$HOME/cobol/include,及び$HOME/cobol/source)を指定します。
  4. SQLプリプロセサで参照できるようにします。

<例2>(csh(Cシェル)で環境設定をする場合)
  
  % setenv   PDDIR "/prdb"                                   … 1
  % setenv   PDCBLFIX ".Cob"                                 … 2
  % setenv   PDCBLLIB $HOME/cobol/include:$HOME/cobol/source … 3
  
<説明>
  1. インストールディレクトリ(この例では/prdb)を指定します。
  2. UAPソースファイルの識別子として,.Cobも有効にします。
  3. 登録原文を検索するディレクトリ(この例では$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-5 プリプロセスオプション(UNIX環境のCOBOL言語の場合)

プリプロセスオプション 内容
-s 構文チェックだけをして,ポストソースを出力しない場合に指定します。このオプションを省略すると,ポストソースが出力されます。
-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ビット版のプリプロセサを使用した場合は指定できません。
-P SQLの構文チェックをしない場合に指定します。次のどちらかのUAPをプリプロセスする場合に指定できます。
  • XDM/RD E2接続用のUAP
  • SQL予約語削除機能を使用するUAP
このオプションを指定しない場合,SQL予約語削除機能で削除対象とした予約語や,XDM/RD E2で使用できるSQLが構文エラーとなることがあります。
-Xo UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき,出力方法は次のようになります。
  • SQL文中の埋込み変数は?パラメタに置換します。
  • 1行SELECT文のINTO句を削除します。
  • SQL文中の語句間の空白が2文字以上の場合,空白1文字に置き換えます。
  • 複数行に分割して記述しているSQLは1行にまとめます。
  • 実行時にサーバに送られるSQLだけ出力します。実行されないSQL文(WHENEVER文,BEGIN DECLARE SECTIONなど)は出力しません。
  • SQLの末尾にはセミコロン(;)を付けます。
  • 埋込み変数の宣言は出力しません。
  • 動的SQLは,SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。
  • OPEN文は,形式1のカーソルの場合だけ,問合せ式を出力します。
  • ポストソースは生成しません。
-c{m|s} COBOLコンパイラの種類を指定します。
m:MicroFocusCOBOL
s:SUN日本語COBOL
-Xe{y|n} PREPRARE文実行時のカーソルを,自動的にクローズするかどうかを指定します。

y:
カーソルを自動的にクローズするポストソースを生成します。

n:
カーソルを自動的にクローズしないポストソースを生成します。
省略した場合,クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。
-E2 埋込み変数を埋込み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機能を使用しない場合は,このオプションを指定しないでください。指定すると,埋込み変数の宣言に日本語項目を使用できなくなります。

 

  1. COBOL言語の場合のコマンド指定例
    <例1>
    UAPソースファイルの名称がsampleで,ポストソースを出力しない場合
      
      pdcbl sample.ecb -s
      
    <例2>
    UAPソースファイルの名称がsampleで,出力するポストソースのファイル名称をmainにする場合
      
      pdcbl sample.ecb -o main.cbl
      
  2. OOCOBOL言語の場合のコマンド指定例
    <例1>
    UAPソースファイルの名称がsampleで,ポストソースを出力しない場合
      
      pdocb sample.eoc -s
      
    <例2>
    UAPソースファイルの名称がsampleで,出力するポストソースのファイル名称をmainにする場合
      
      pdocb sample.eoc -o main.ocb
      
(c) SQLプリプロセサのリターンコード

SQLプリプロセサは,処理終了後にリターンコードをOSに返します。

リターンコードは,シェル変数$?(ボーンシェルの場合),又は$status(Cシェルの場合)の内容を表示させることで参照できます。

リターンコードとその内容を次の表に示します。

表8-6 SQLプリプロセサのリターンコード(UNIX環境でのCOBOL言語の場合)

リターンコード 内     容
0 正常終了
4,8 エラー発生(プリプロセスを最後まで続行)
12,16 エラー発生(プリプロセスを途中で終了)
(d) エラーの出力

SQLプリプロセサは,SQL文に文法上のエラーが発生した場合,そのSQL文を無視して処理を続行します。しかし,オプションの指定に誤りがある場合,処理を中断します。また,メモリ不足やファイル入出力エラーなど,システム上でエラーが発生し,それ以降の処理ができない場合,処理の途中でも終了します。

SQL文に文法上のエラーが発生したとき,SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると,エラーメッセージをファイルに格納できます。ファイルを参照すると,エラー内容,UAPソースファイル名,エラーが発生した箇所(SQL文の行番号)などが分かります。

SQLプリプロセサの標準入出力を次の表に示します。

表8-7 SQLプリプロセサの標準入出力(UNIX環境でのCOBOL言語の場合)

ファイル 用     途
標準入力 ファイルの入力(ユーザは使用不可)
標準出力 ファイルの出力(ユーザは使用不可)
標準エラー出力 エラーメッセージの出力