この章ではPro*COBOLのプリコンパイラ・オプションを説明します。この章の構成は、次のとおりです。
Pro*COBOLは、システムごとに異なった場所に格納されます。通常は、システム管理者かDBAが、環境変数または別名を定義するか、あるいはオペレーティング・システム固有のその他の方法を使用して、Pro*COBOLの実行可能ファイルをアクセス可能にします。
Oracle Pro*COBOLプリコンパイラを実行するには、次のコマンドを使用します。
procob [option_name=value] [option_name=value] ...
オプション名とオプション値の間には必ず等号(=)を置きます。等号の前後には空白を入れないでください。
たとえば、プリコンパイルするソース・ファイルの指定には、INAMEオプションを使用します。次のコマンドを実行するとします。
procob INAME=test
Pro*COBOLはファイル拡張子を.pcoとみなすため、カレント・ディレクトリ内のファイルtest.pcoがプリコンパイルされます。
このように、INAMEの指定でファイル拡張子を使用する必要はありません(ただし、ファイル拡張子が標準以外の場合には拡張子を指定する必要があります)。
入力ファイル名および出力ファイル名を、それぞれのオプション名INAMEおよびONAMEとともに指定する必要はありません。オプション名を指定しない場合、Pro*COBOLはコマンドラインに指定された最初のファイル名を入力ファイル名とみなし、2番目のファイル名を出力ファイル名とみなします。
たとえば、次のコマンドを実行するとします。
procob MODE=ANSI myfile myfile.cob
このコマンドは、次のコマンドに相当します。
procob MODE=ANSI INAME=myfile.pco ONAME=myfile.cob
一般に、コマンドライン・オプションの名前および値には、大文字と小文字のどちらも使用できます。ただし、大/小文字を区別するオペレーティング・システム(UNIXなど)を使用している場合は、Pro*COBOLの実行可能ファイルの名前も含めて、ファイル名は大文字と小文字を正しく組み合せて指定してください。
注意: ファイル名などのように、特定のオペレーティング・システム・オブジェクトを指定しないオプション名やオプション値では、大文字と小文字は区別されません。このマニュアル中の例では、オプション名は大文字または小文字で記述し、オプション値は通常は小文字で記述しています。ファイル名を指定する場合は、Pro*COBOLの実行可能ファイルも含めて、それを実行するオペレーティング・システムの大/小文字区別の規則に従ってください。
UNIX Cシェルなどの一部のオペレーティング・システムおよびユーザー・シェルでは、?
の前にバックスラッシュ(\)などのエスケープ文字を指定する必要があります。 たとえば、Pro*COBOLのオプション設定を示すには、procob?
のかわりにprocob \?
を使用する必要があります。
プラットフォーム固有のマニュアルを参照してください。
Pro*COBOLは、プリコンパイル中に、ホスト・プログラムに埋め込まれたSQL文に置き換わるCOBOLのコードを生成します。生成されたコードには、各ホスト変数のデータ型、長さ、アドレスなどデータ構造の他、Oracleランタイム・ライブラリSQLLIBが必要とするその他の情報が組み込まれています。またこのコードには、埋込みSQLの処理を実行するSQLLIBルーチンのコールも入っています。
Pro*COBOLは警告やエラー・メッセージを発行することがあります。これらのメッセージは、『Oracle Databaseエラー・メッセージ』で説明されています。
プリコンパイル時には数多くの便利なオプションを使用できます。それらを使用して、リソースの使用、エラーの報告、入出力の書式化およびカーソルの管理を制御できます。
オプションの値はリテラルであり、テキストまたは数値を表します。たとえば、次のオプションを指定するとします。
... INAME=my_test
この値はファイル名を指定する文字列リテラルです。
また、次のオプションを指定するとします。
... PREFETCH=100
この値は数値です。
オプションの中にはブール値をとるものもあります。ブール値には、文字列YESまたはNO、TRUEまたはFALSE、整数リテラル1または0を指定できます。たとえば、次のオプションを指定するとします。
... SELECT_ERROR=YES
このオプションは、次のオプションに相当します。
... SELECT_ERROR=TRUE
または
... SELECT_ERROR=1
等号(=)の前後に空白は入れません。空白によって個々のオプションが区切られるためです。たとえば、次のように、コマンドラインにオプションAUTO_CONNECTを指定できます。
... AUTO_CONNECT=YES
オプション名には略称を使用できますが、他と区別がつかなくなる略称は使用しないでください。たとえば、MAXの略称はMAXLITERALとMAXOPENCURSORSのどちらを表すのかわからないため、使用できません。
Pro*COBOLオプションの参考資料は、オンラインで簡単に見ることができます。オンライン表示するには、オペレーティング・システムのプロンプトから、引数を指定せずにPro*COBOLコマンドを入力します。
procob
オンライン画面には、各オプションの名前および、構文、デフォルト値および用途が表示されます。アスタリスク(*)が付いたオプションは、コマンドラインでもインラインでも指定できます。
オプションの値は、次の値によって決まります(下にいくほど優先順位が高くなります)。
Pro*COBOLに組み込まれているデフォルト値
システム構成ファイルに設定されている値
ユーザー構成ファイルに設定されている値
コマンドラインに入力された値
インライン指定で設定された値セット
たとえば、オプションMAXOPENCURSORSはキャッシュ内のオープン・ カーソルの最大数を指定します。Pro*COBOLに組み込まれているこのオプションのデフォルト値は10です。システム構成ファイルにMAXOPENCURSORS=32が指定されている場合は、値は32になります。ユーザー構成ファイルの設定値は変更できます。変更すると、システム構成値が上書きされます。
MAXOPENCURSORSオプションをコマンドラインで設定した場合には、新しいコマンドラインの値が優先されます。最終的には、インライン指定が前述のすべてのデフォルト値よりも優先されます。詳細は、「プリコンパイラ・オプションの入力」を参照してください。
オプションMODEはマクロ・オプションです。新しいオプションの中には、END_OF_FETCHのように、1つの機能のみを制御するものがあります。このようなオプションをマイクロ・オプションと呼びます。マクロ・オプションおよびマイクロ・オプションを設定する場合、マクロ・オプションがマイクロ・オプションに優先されるように注意する必要があります。マクロ・オプションの優先順位がマイクロ・オプションより高い場合にのみ、マクロ・オプションが優先されます。(詳細は、「オプション値の優先順位」を参照。)この点は、リリース8.0より前のPro*COBOLとは動作が異なります。
たとえば、MODEのデフォルトはORACLEです。また、END_OF_FETCHのデフォルトは1403です。ユーザー構成ファイルにMODE=ANSIを指定した場合は、Pro*COBOLからフェッチの最後に値100が戻され、END_OF_FETCHのデフォルト値1403が上書きされます。また、構成ファイルでEND_OF_FETCH=1403と指定し、コマンドラインでMODE=ANSIと指定した場合は、100が戻されます。
次の表に、マクロ・オプションの値によって設定されるマイクロ・オプションの値を示します。
表14-1 マクロ・オプション値によるマイクロ・オプション値の設定
マクロ・オプション | マイクロ・オプション |
---|---|
MODE=ANSI | ISO |
CLOSE_ON_COMMIT=YES DECLARE_SECTION=YES END_OF_FETCH=100 DYNAMIC=ANSI TYPE_CODE=ANSI |
MODE=ANSI14 | ANSI13 | ISO14 | ISO13 |
CLOSE_ON_COMMIT=NO DECLARE_SECTION=YES END_OF_FETCH=100 |
MODE=ORACLE |
CLOSE_ON_COMMIT=NO DECLARE_SECTION=NO END_OF_FETCH=1403 DYNAMIC=ORACLE TYPE_CODE=ORACLE |
コマンドラインで疑問符(?)を使用すると、複数のオプションのカレント値を対話形式で調べることができます。たとえば、次のコマンドを発行したとします。
procob ?
すべてのオプションの設定およびそのカレント値が端末に表示されます。この場合、表示される値はPro*COBOLに組み込まれている値ですが、システム構成ファイルに値が指定されている場合は構成ファイル内の値が表示されます。一方、次のコマンドを発行したとします。
procob CONFIG=my_config_file.cfg ?
カレント・ディレクトリにmy_config_file.cfg
の名前のファイルがあると、my_config_file.cfg
ファイルに指定されているオプションが、その他のデフォルト値とともに表示されます。ユーザー構成ファイル内で指定された値はここでは表示されません。また、ユーザー構成ファイルに指定された値は、Pro*COBOLに組み込まれている値やシステム構成ファイルに指定されている値より優先されます。
次のようにオプション名の後に=?
を指定して、シングル・オプションのカレント値を指定することもできます。
procob MAXOPENCURSORS=?
CONFIG以外のPro*COBOLのオプションはすべて、コマンドラインまたは構成ファイルから入力できます。また、インラインで入力できるオプションも多数あります。Pro*COBOLは実行時に、これら3つのソースのオプションをすべて受け入れます。
... [option_name=value] [option_name=value] ...
を使用して、コマンドラインからプリコンパイラ・オプションを入力できます。
オプションとオプションの間は、1つ以上の空白で区切ります。たとえば、次のようにオプションを入力できます。
... ERRORS=no LTYPE=short
次の構文を使用してEXEC ORACLE OPTION文を記述すると、オプションをインライン入力できます。
EXEC ORACLE OPTION (option_name=value) END-EXEC.
たとえば、次のような文をコーディングできます。
EXEC ORACLE OPTION (RELEASE_CURSOR=YES) END-EXEC.
インラインでオプションを入力すると、コマンドラインから入力された同じオプションは無効になります。
EXEC ORACLE機能は、プリコンパイル中にオプション値を変更する場合に特に便利です。 たとえば、文ごとにHOLD_CURSOR値およびRELEASE_CURSOR値を変更することがあります。この場合、付録C「パフォーマンス・チューニング」を参照してください。実行時のパフォーマンスを最適化するための、インライン・オプションの使用方法が記載されています。
インラインでのオプションの指定は、使用しているオペレーティング・システムでコマンドラインに入力できる文字数に制限がある場合にも便利です。また、インライン・オプションは構成ファイルに格納できます。これについては次の項で説明します。
EXEC ORACLE文は、同一オプションを指定した別のEXEC ORACLE文によってオプション指定値(テキスト)が変更されるまで有効です。次の例では、HOLD_CURSOR=NOはHOLD_CURSOR=YESが指定されるまで有効です。
EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 EMP-NAME PIC X(20) VARYING. 01 EMP-NUMBER PIC S9(4) COMP VALUE ZERO. 01 SALARY PIC S9(5)V99 COMP-3 VALUE ZERO. 01 DEPT-NUMBER PIC S9(4) COMP VALUE ZERO. EXEC SQL END DECLARE SECTION END-EXEC. ... EXEC SQL WHENEVER NOT FOUND GOTO NO-MORE END-EXEC. ... EXEC ORACLE OPTION (HOLD_CURSOR=NO)END-EXEC. ... EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT EMPNO, DEPTNO FROM EMP END-EXEC. EXEC SQL OPEN emp_cursor END-EXEC. DISPLAY 'Employee Number Dept'. DISPLAY '--------------- ----'. PERFORM EXEC SQL FETCH emp_cursor INTO :EMP-NUMBER, :DEPT-NUMBER END-EXEC DISPLAY EMP-NUMBER, DEPT-NUMBER END-EXEC END-PERFORM. NO-MORE. EXEC SQL WHENEVER NOT FOUND CONTINUE END-EXEC. PERFORM DISPLAY 'Employee number? ' ACCEPT EMP-NUMBER IF EMP-NUMBER IS NOT = 0 EXEC ORACLE OPTION (HOLD_CURSOR=YES) END-EXEC EXEC SQL SELECT ENAME, SAL INTO :EMP-NAME, :SALARY FROM EMP WHERE EMPNO = :EMP-NUMBER DISPLAY 'Salary for ', EMP-NAME, ' is ', SALARY END-EXEC END-IF END-PERFORM. NEXT-PARA. ...
構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイルのそれぞれのレコード(行)には、1つのオプションおよび対応付けられた値が入ります。たとえば、構成ファイルに次のような行が入っているとします。
FIPS=YES MODE=ANSI
これらの行によってFIPSオプションとMODEオプションの値が設定されています。
システムにはそれぞれ1つのシステム構成ファイルがあります。システム構成ファイルの名前は次のとおりです。
pcbcfg.cfg
システム構成ファイルの位置はオペレーティング・システムによって異なります。ほとんどのUNIXシステムでは、Pro*COBOL構成ファイルは通常、$ORACLE_HOME/precomp/adminディレクトリにあります($ORACLE_HOMEはデータベース・ソフトウェアの環境変数です)。
リリース8.0より前のPro*COBOLでは、構成ファイル名はpccob.cfgであることに注意してください。
Pro*COBOLのユーザーは1つ以上のユーザー構成ファイルを持つことができます。ユーザー構成ファイルの名前はCONFIGオプションを使用してコマンドラインで指定します。詳細は、「カレント値の決定」を参照してください。
注意: 構成ファイルはネストできません。つまり、CONFIGは構成ファイル内では有効なオプションではありません。
プリコンパイル・ユニットは、COBOLコードおよび1つ以上の埋込みSQL文が入っている1つのファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのプリコンパイル・ユニットにのみ効力を持ちます。
たとえば、単位AにHOLD_CURSOR=YESおよびRELEASE_CURSOR=YESを指定し、単位Bには指定しなかった場合、単位AのSQL文は指定したHOLD_CURSORおよびRELEASE_CURSORの値で実行されますが、単位BのSQL文はデフォルト値で実行されます。ただし、Oracleに接続した時点で有効であったMAXOPENCURSORSの設定は、その接続を切り離すまで有効です。
インライン・オプションのスコープは論理的なものではなく、位置的なものです。つまり、インライン・オプションの影響を受けるのは、プログラム・ロジックの流れでそのインライン・オプションの後にくるSQL文ではなく、ソース・ファイル内でそのインライン・ オプションの後に記述されているSQL文です。オプションの設定は、そのオプションを再指定しないかぎり、ファイルの終わりまで有効です。
表14-2は、Pro*COBOLオプションのクイック・リファレンスを示しています。アスタリスクが付いているオプションは、インラインで入力できます。
また、オンラインでも簡単な参照ができます。オンライン画面でPro*COBOLオプションを表示するには、オペレーティング・システムのプロンプトに、オプションを指定せずにPro*COBOLコマンドを入力します。オンライン画面には、各オプションの名前および、構文、デフォルト値および用途が表示されます。
注意: プラットフォーム固有のオプションもいくつかあります。たとえば、バイトスワップ・プラットフォームでは、オプションCOMP5によってCOMPUTATIONAL項目の使用を管理します。使用しているシステム固有のOracleマニュアルを参照してください。
表14-2 オプション・リスト
構文 | デフォルト値 | 指定内容 |
---|---|---|
ASACC={YES | NO} |
NO |
YESの場合は、リスト・ファイルにASAキャリッジ制御を使用します。 |
ASSUME_SQLCODE={YES | NO} |
NO |
YESの場合は、SQLCODE変数が存在するものとみなします。 |
AUTO_CONNECT={YES | NO} |
NO |
YESの場合は、最初の実行文の前に、ops$アカウントに自動的に接続できます。 |
CLOSE_ON_COMMIT |
NO |
YESの場合は、COMMIT時にすべてのカーソルをクローズします。 |
CONFIG=filename |
(なし) |
ユーザー定義構成ファイルの名前を指定します。 |
DATE_FORMAT |
LOCAL |
日付文字列フォーマットを指定します。 |
DBMS={NATIVE | V7 | V8} |
NATIVE |
プリコンパイル時にみられるOracleのバージョン固有の動作です。 |
DECLARE_SECTION |
NO |
YESの場合は、DECLARE SECTIONが必須となります。 |
DEFINE=symbol * |
(なし) |
条件付きプリコンパイルで使用する記号を定義します。 |
DYNAMIC |
ORACLE |
SQL方法4で、OracleまたはANSI動的セマンティクスを指定します。 |
END_OF_FETCH |
1403 |
フェッチ終了時のSQLCODEの値。 |
ERRORS={YES | NO} * |
YES |
YESの場合は、端末にエラーを表示します。 |
FIPS={YES | NO} |
NO |
YESの場合は、ANSI/ISOの拡張機能にフラグを付けます。 |
FORMAT={ANSI | TERMINAL | VARIABLE} |
ANSI |
入力ファイルのCOBOL文の書式。 |
HOLD_CURSOR={YES | NO}* |
NO |
YESの場合は、Oracleカーソルを保持します(再割当てしません)。 |
HOST={COBOL | COB74} |
COBOL |
入力ファイルで使用するCOBOLのバージョン(COBOL 85またはCOBOL 74)。 |
[INAME=]filename |
(なし) |
入力ファイルの名前。 |
INCLUDE=path* |
(なし) |
EXEC SQL INCLUDEファイルのパス名。 |
IRECLEN=integer |
80 |
入力ファイルのレコード長。 |
LITDELIM={APOST | QUOTE} |
QUOTE |
COBOL文字列のデリミタ。 |
LNAME=filename |
(なし) |
リスト・ファイルの名前。 |
LRECLEN=integer |
132 |
リスト・ファイルのレコード長。 |
LTYPE={LONG | SHORT | NONE} * |
LONG |
リスト・ファイルの型。 |
MAXLITERAL=integer* |
1024 |
文字列の最大長。 |
MAXOPENCURSORS=integer * |
10 |
キャッシュされるOracleカーソルの最大数(1)。 |
MODE={ORACLE | ANSI} |
ORACLE |
ANSIの場合は、ANSI/ISO SQL規格に準拠します。 |
NESTED={YES | NO} |
YES |
YESの場合は、ネストしたプログラムがサポートされます。 |
NLS_LOCAL={YES | NO} |
NO |
YESの場合は、Pro*COBOLの旧リリースのNCHAR方法を使用します。 |
[ONAME=]filename |
iname.cob |
出力ファイルの名前。 |
ORACA={YES | NO}* |
NO |
YESの場合は、ORACAコミュニケーション領域を使用します。 |
ORECLEN=integer |
80 |
出力ファイルのレコード長。 |
PAGELEN=integer |
66 |
リスト・ファイルの1ページ当たりの行数。 |
PICX |
CHARF |
PIC X COBOL変数のデータ型。 |
PREFETCH |
1 |
一定数の行をプリフェッチして、問合せを高速化します。 |
RELEASE_CURSOR={YES | NO} * |
NO |
YESの場合は、実行後にOracleカーソルを解放します。 |
SELECT_ERROR={YES | NO}* |
YES |
YESの場合は、SELECT時にFOUNDエラーが発生します。 |
SQLCHECK={SEMANTICS | SYNTAX}* |
SYNTAX |
SQLチェックのレベル。 |
THREADS={YES | NO} |
NO |
マルチスレッド・アプリケーションを示します。 |
TYPE_CODE |
ORACLE |
動的SQL方法4の場合は、OracleまたはANSI型コードを使用します。 |
UNSAFE_NULL={YES | NO} |
NO |
YESの場合は、安全でないNULLのフェッチが可能になります(ORA-01405メッセージが発行されなくなります)。 |
USERID=username/password[@dbname] |
(なし) |
Oracleのユーザー名、パスワードおよびオプショナル・データベース。 |
VARCHAR={YES | NO} |
NO |
YESの場合は、ユーザー定義のVARCHARグループ項目を受け入れます。 |
XREF={YES | NO}* |
YES |
YESの場合は、リスト・ファイル内に記号のクロス・リファレンスを生成します。 |
この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。Pro*COBOLプリコンパイラ・オプションをアルファベット順に示し、各オプションごとに用途、構文およびデフォルト値を記載してあります。さらに「使用上の注意」で、オプションについて説明します。使用上の注意に特に記載がない場合、そのオプションはコマンドライン、インラインまたは構成ファイルのどの方法でも入力できます。
用途
リスト・ファイルがASA規則に従って、キャリッジ制御のために各行の最初の桁を使用するかどうかを指定します。
構文
ASACC={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
用途
SQLCODEがプログラムで宣言されているかどうか、また、型が正しいかどうかに関係なく、SQLCODEが宣言されているとみなすようにPro*COBOLに指示します。
構文
ASSUME_SQLCODE={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
DECLARE_SECTION=YESの場合にASSUME_SQLCODE=YESと指定すると、SQLCODEを宣言部の外で宣言できます。
DECLARE_SECTION=YESの場合にASSUME_SQLCODE=NOと指定すると、次の基準のうち少なくとも1つが満たされた場合にのみ、SQLCODEは状態変数として認識されます。
完全に正しいデータ型で宣言済の場合。
Pro*COBOLが他の状態変数を見つけられない場合。Pro*COBOLは、(完全に正しい型の)SQLSTATE宣言を検出した場合や、SQLCAの組込みを検出した場合には、SQLCODEが宣言されているとはみなしません。
ASSUME_SQLCODE=YESと指定した場合は、SQLSTATEまたはSQLCAあるいはその両方が状態変数として宣言されると、SQLCODEが宣言されているかどうか、また正しい型かどうかに関係なく、Pro*COBOLはSQLCODEが宣言されているものとみなします。
用途
プログラムをデフォルトのユーザー・アカウントに自動的に接続するかどうかを指定します。
構文
AUTO_CONNECT={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
AUTO_CONNECT=YESと指定した場合、Pro*COBOLが実行SQL文を検出すると同時に、ユーザー・プログラムは自動的に次のユーザーIDでOracleにログインを試みます。
<prefix><username>
<prefix>にはOracle初期化パラメータOS_AUTHENT_PREFIXの値(デフォルト値はOPS$)を指定し、<username>には使用しているオペレーティング・システムのユーザー名またはタスク名を指定します。この場合、コマンドラインに別の値を指定しても、MAXOPENCURORS(10)のデフォルト値は変更できません。
AUTO_CONNECT=NO(デフォルト)の場合は、OracleにログインするにはCONNECT文を使用する必要があります。
用途
SELECT、INSERTまたはUPDATE文で使用されるPIC X変数に使用するキャラクタ・セットの形式を指定します。
構文
CHARSET_PICX={NCHAR_CHARSET | DB_CHARSET }
デフォルト値
DB_CHARSET
使用上の注意
コマンドラインまたは構成ファイルでは入力できますが、インラインでは入力できません。
CHARSET_PICX = NCHAR_CHARSETと指定した場合、PIC Xバインド・バッファまたは定義バッファは、サーバー側の各国語キャラクタ・セットに従って変換されます。ターゲット列がCHARの場合は、パフォーマンスに影響を及ぼす可能性があります。同様に、CHARSET_PICX = DB_CHARSETと指定した場合、PIC Xバインド・バッファまたは定義バッファは、サーバー側のデータベース・キャラクタ・セットに従って変換されます。ターゲット列がNCHARの場合は、一部のデータが失われる可能性があります。
用途
SELECT、INSERTまたはUPDATE文で使用されるPIC N変数に使用するキャラクタ・セットの形式を指定します。
構文
CHARSET_PICN={NCHAR_CHARSET | DB_CHARSET }
デフォルト値
NCHAR_CHARSET
使用上の注意
コマンドラインまたは構成ファイルでは入力できますが、インラインでは入力できません。
CHARSET_PICN = DB_CHARSETと指定した場合、PIC Nバインド・バッファまたは定義バッファは、サーバー側のデータベース・キャラクタ・セットに従って変換されます。ターゲット列がNCHARの場合は、一部のデータが失われる可能性があります。同様に、CHARSET_PICN = NCHAR_CHARSETと指定した場合、PIC Nバインド・バッファまたは定義バッファは、サーバー側の各国語キャラクタ・セットに従って変換されます。ターゲット列がCHARの場合は、パフォーマンスに影響を及ぼす可能性があります。 .
用途
WITH HOLD句なしで宣言されたカーソルを、コミット時にすべてクローズするかどうかを指定します。
構文
CLOSE_ON_COMMIT={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
このオプションは、DECLARE CURSOR文でWITH HOLD句を使用せずに宣言されたカーソルがある場合にのみ有効です(WITH HOLD句が指定されていると、このオプションも、MODEオプションに対応するそれまでの動作も無効になります)。CLOSE_ON_COMMITより高いレベルでMODEが指定されていると、MODEが優先されます。たとえば、デフォルトはMODE=ORACLEおよびCLOSE_ON_COMMIT=NOです。コマンドラインでMODE=ANSIと指定した場合は、WITH HOLD句を使用せずに宣言されているカーソルはすべて、コミット時にクローズされます。
CLOSE_ON_COMMIT=NO(MODE=ORACLEの場合)の場合、COMMITまたはROLLBACKを発行しても、クローズされるのはFOR UPDATE句を使用して宣言されたカーソルまたはCURRENT OF句で参照されるカーソルのみです。その他のカーソルはCOMMITまたはROLLBACK文による影響を受けず、オープンされている場合はオープンされたままです。ただし、CLOSE_ON_COMMIT=YES(MODE=ANSIの場合)のときにCOMMITまたはROLLBACKを発行すると、すべてのカーソルがクローズします。
このオプションの優先順位の詳細は、「マクロ・オプションおよびマイクロ・オプション」を参照してください。
SQL99構文のSELECT、INSERT、DELETE、UPDATEおよびDECLARE CURSOR文のカーソル本体がサポートされます。
構文
COMMON_PARSER={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインで入力できます。
用途
構文
CONFIG=filename
デフォルト値
なし
使用上の注意
コマンドラインでのみ入力できます。
Pro*COBOLは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。ユーザー構成ファイルと呼ばれる代替ファイルも指定できます。詳細は、「プリコンパイラ・オプションの入力」を参照してください。
構成ファイルはネストできません。したがって、構成ファイルはオプションCONFIGを指定できません。
用途
構文
DATE_FORMAT={ISO | USA | EUR | JIS | LOCAL | 'fmt'(デフォルト LOCAL)}
デフォルト値
LOCAL
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。指定できる日付文字列を次の表に示します。
表14-3 日付文字列用の書式
書式名 | 略称 | 日付書式 |
---|---|---|
国際標準化機構規格 |
ISO |
yyyy-mm-dd |
USA標準 |
USA |
mm/dd/yyyy |
ヨーロッパ標準 |
EUR |
dd.mm.yyyy |
日本工業規格 |
JIS |
yyyy-mm-dd |
インストール定義 |
LOCAL |
インストール時に定義した任意の書式 |
'fmt'は、「Month dd, yyyy」などの日付書式モデルです。日付書式モデル要素の一覧は、『Oracle Database SQL言語リファレンス』を参照してください。
DATE_FORMATオプションの使用方法には、制限が1つあります。コンパイルした単位を後でリンクする場合、すべての単位が同じDATE_FORMAT値を使用している必要があります。コンパイル単位間でDATE_FORMATの値に不一致があると、エラーが発生します。
このオプションに基づいて、プリコンパイラは追加の配列INSERTおよび配列SELECT構文をアクティブにします。
構文
デフォルト値
NO
使用上の注意
このオプションをNOに設定すると、Oracleプリコンパイラの構文がサポートされます。それ以外の場合は、DB2の配列INSERTおよび配列SELECT構文がサポートされます。
用途
Oracleの意味上および構文上の規則を、Oracle7データベース、Oracle8i、Oracle9iまたはOracleのネイティブ・バージョン(アプリケーションが接続されているバージョン)のうちどの規則に合わせるかを指定します。
構文
DBMS={V7 | V8 | NATIVE}
デフォルト値
NATIVE
使用上の注意
インラインでは入力できません。
DBMSオプションを使用して、Oracleのバージョン固有の動作を制御できます。DBMS=NATIVE(デフォルト)の場合、Oracleは、Oracleのネイティブ・バージョンの意味および構文上の規則に従います。
用途
宣言部内の宣言のみホスト変数として使用するかどうかを指定します。
構文
DECLARE_SECTION={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
Pro*COBOLリリース8.0以降では、MODE=ORACLEであれば、BEGIN DECLARE SECTION文とEND DECLARE SECTION文は省略できます。DECLARE_SECTIONオプションは、旧リリースとの下位互換性のために用意されています。DECLARE_SECTIONはMODEのマイクロ・オプションです。
このオプションを使用すると、MODE=ORACLEとDECLARE_SECTION=YESを一緒に指定でき、旧リリースでMODE=ORACLEのみ指定した場合と同じ結果が得られます。(DECLARE文で宣言した変数のみ、ホスト変数として使用できます。)このオプションの優先順位の詳細は、「オプション値の優先順位」を参照してください。
用途
条件付きプリコンパイル時にソース・コードの一部組込みまたは除外を行うために使用する、ユーザー定義の記号を指定します。詳細は、「条件付きプリコンパイル」を参照してください。
構文
DEFINE=symbol
デフォルト値
なし
使用上の注意
DEFINEをインラインで入力する場合のEXEC ORACLE文の書式は次のとおりです。
EXEC ORACLE DEFINE symbol END-EXEC.
用途
このMODEマイクロ・オプションは、動的SQL方法4の記述子の動作を指定します。
構文
DYNAMIC={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
EXEC ORACLE OPTION文を使用してインラインで入力することはできません。
DYNAMICオプションの設定については、「ANSI動的SQLのプリコンパイラ・オプション」を参照してください。
用途
このMODEマイクロ・オプションは、SQL文の実行後にEND-OF-FETCH条件が発生した場合に戻されるSQLCODE値を指定します。
構文
END_OF_FETCH={100 | 1403}
デフォルト値
1403
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
END_OF_FETCHはMODEのマイクロ・オプションです。詳細は、「マクロ・オプションおよびマイクロ・オプション」を参照してください。
構成ファイルでMODE=ANSIと指定した場合、END_OF_FETCH条件が発生すると、Pro*COBOLはSQLCODE値100を戻し、END_OF_FETCHのデフォルト値である1403をオーバーライドします。
構成ファイルでMODE=ANSIとEND_OF_FETCH=1403の両方を指定した場合は、END_OF_FETCH条件が発生すると、Pro*COBOLはSQLCODE値1403を戻します。
構成ファイルでMODE=ANSIと指定し、構成ファイルよりも優先順位の高いコマンドラインでEND_OF_FETCH=1403と指定した場合も、END_OF_FETCH条件が発生するとPro*COBOLはSQLCODE値1403を戻します。
用途
Pro*COBOLのエラー・メッセージを、端末およびリスト・ファイルの両方に送るか、リスト・ファイルにのみ送るかを指定します。
構文
ERRORS={YES | NO}
デフォルト値
YES
使用上の注意
ERRORS=YESと指定すると、エラー・メッセージは端末とリスト・ファイルの両方に送られます。
ERRORS=NOのときは、エラー・メッセージはリスト・ファイルにのみ送られます。
用途
生成されたCOBOLファイルの一意の識別子を示します。生成されたファイルには、「SQLCTX」変数と関連付けられた一意の数値が含まれます。file_idオプションを使用すると、SQLCTX変数の値を設定できます。このオプションは、複数のソース・ファイルをプリコンパイルする際に有効で、ユーザーは生成された異なるファイルと関連付けられた一意のSQLCTX値を確保できます。
構文
FILE_ID=0から65535
デフォルト値
0
使用上の注意
file_idオプションを使用すると、生成されたCOBOLファイルの「SQLCTX」変数に直接値を割り当てることができます。
用途
ANSI/ISO SQLの拡張機能に(FIPSフラガーによって)フラグを付けるかどうかを指定します。拡張機能とは、ANSI/ISOの形式または構文規則(権限付与規則は除く)に従っていないSQL要素のことです。
構文
FIPS={YES | NO}
デフォルト値
NO
使用上の注意
FIPS=YESの場合は、ANSI/ISOに組み込まれたSQL規格(SQL92)からのOracle拡張機能を使用したり、SQL92の機能を規格に準拠しない方法で使用すると、FIPSフラガーは警告メッセージを発行します(エラー・メッセージではありません)。
プリコンパイル時に、次に示すANSI/ISO SQLの拡張機能にフラグが付きます。
FOR句を含む配列インタフェース
SQLCA、ORACAおよびSQLDAデータ構造体
DESCRIBE文を含む動的SQL
埋込みPL/SQLブロック
自動データ型変換
DATE、COMP-3、NUMBER、RAW、LONG RAW、VARRAW、ROWIDおよびVARCHARデータ型
実行時オプションを指定するためのORACLE OPTION文
ユーザー・イグジットでのEXEC TOOLS文
CONNECT文
TYPEおよびVARデータ型の同値化文
AT db_name句
DECLARE...DATABASE文、...STATEMENT文および...TABLE文
WHENEVER文でのSQLWARNING条件
WHENEVER文のDO処置およびSTOP処置
COMMIT文のCOMMENT句およびFORCE TRANSACTION句
ROLLBACK文でのFORCE TRANSACTION句およびTO SAVEPOINT句
COMMIT文およびROLLBACK文でのRELEASEパラメータ
INTO句のWHENEVER...DOラベルおよびホスト変数の前に付けるオプションのコロン
用途
構文
FORMAT={ANSI | TERMINAL | VARIABLE}
デフォルト値
ANSI
使用上の注意
インラインでは入力できません。
入力行の書式はシステムによって異なります。システム固有のOracleのマニュアルまたはCOBOLコンパイラをチェックしてください。
FORMAT=ANSIと指定した場合、入力行の書式はCOBOLに関する現行のANSI規格にできるかぎり準拠しているものと解釈されます。FORMAT=TERMINALと指定した場合、入力行は列1から始まります。このマニュアルのサンプル・コードはTERMINAL書式内にあります。FORMAT=VARIABLEを使用すると、B領域な長さの柔軟性が許可されます。詳細は、「コーディング領域」を参照してください。
用途
カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの取扱い方法を指定します。
構文
HOLD_CURSOR={YES | NO}
デフォルト値
NO
使用上の注意
HOLD_CURSORを使用すると、プログラムのパフォーマンスを改善できます。詳細は、付録C「パフォーマンス・チューニング」を参照してください。
SQL DML文を実行すると、その文に対応付けられたカーソルがカーソル・キャッシュ内のエントリにリンクされます。続いてカーソル・キャッシュ・エントリはOracleプライベートSQL領域にリンクされます。この領域にはSQL文の実行に必要な情報が格納されます。HOLD_CURSORはカーソルとカーソル・キャッシュの間のリンクで発生する処理を制御します。
HOLD_CURSOR=NOと指定した場合、OracleがSQL文を実行してカーソルがクローズされた後、Pro*COBOLはそのリンクを再使用可能としてマークします。このリンクは、それが示すカーソル・キャッシュ・エントリが別のSQL文に必要になると、すぐに再利用されます。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。
HOLD_CURSOR=YESを指定した場合は、リンクは維持され、Pro*COBOLはリンクを再利用しません。これによって、以降の実行をスピードアップし、文を再解析したり、OracleプライベートSQL領域にメモリーを割り当てる必要がなくなるため、実行頻度の高いSQL文に使用すると便利です。
暗黙カーソルをインラインで使用する場合は、SQL文の実行前にHOLD_CURSORを設定してください。明示カーソルをインラインで使用する場合は、カーソルをオープンする前にHOLD_CURSORを設定してください。
HOLD_CURSORおよびRELEASE_CURSORオプションの相互動作に関する詳細は、付録C「パフォーマンス・チューニング」の表C-1「HOLD_CURSORおよびRELEASE _CURSORの相互関係」を参照してください。
用途
構文
HOST={COB74 | COBOL}
デフォルト値
COBOL
使用上の注意
インラインでは入力できません。
COB74は、ANSI承認COBOLの1974版を表します。COBOLは、1985版を表します。プラットフォームによっては、これ以外の値も使用できます。
新しくバッチ処理された挿入を開始する前に、暗黙的なセーブポイントを設定するかどうかを制御します。
構文
implicit_svpt={YES|NO}
デフォルト値
NO
使用上の注意
YESの場合は、新しい行のバッチを開始する前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的な「セーブポイントへのロールバック」が実行されます。このオプションはDB2の互換性のために存在します。明らかなデメリットは、余分なラウンドトリップが発生することです。
NOの場合は、暗黙的なセーブポイントが設定されません。バッファ済INSERTでエラーが発生すると、アプリケーションに通知されますが、ロールバックは実行されません。
用途
構文
INAME=filename
デフォルト値
なし
使用上の注意
インラインでは入力できません。
プリコンパイル時は、すべての入力ファイル名を一意にする必要があります。
コマンドラインから入力ファイルの名前を指定する場合は、キーワードINAMEは省略できます。たとえば、Pro*COBOLでは、INAME=myprog.pcoと指定するかわりにmyprog.pcoと指定できます。
このように、INAMEの指定でファイル拡張子を使用する必要はありません(ただし、ファイル拡張子が標準以外の場合には拡張子を指定する必要があります)。UNIXプラットフォームでは、Pro*COBOLはデフォルトの入力ファイル拡張子pcoを使用します。
用途
EXEC SQL INCLUDEファイルのディレクトリ・パスを指定します。このオプションは、ディレクトリを使用するオペレーティング・システム専用です。
構文
INCLUDE=path
デフォルト値
カレント・ディレクトリ
使用上の注意
通常、INCLUDEはSQLCAファイルおよびORACAファイルのディレクトリ・パスを指定するために使用します。Pro*COBOLは、最初にカレント・ディレクトリを検索し、次にINCLUDEで指定されたディレクトリを検索して、最後に標準INCLUDEファイル用のディレクトリを検索します。このため、SQLCAやORACAなどの標準ファイルのディレクトリ・パスを指定する必要はありません。
しかし、標準以外のファイルについては、カレント・ディレクトリに格納されている場合を除いて、INCLUDEを使用してディレクトリ・パスを指定する必要があります。次に示すように、コマンドラインに複数のパスを指定できます。
... INCLUDE=path1 INCLUDE=path2 ...
Pro*COBOLは、最初にカレント・ディレクトリを検索し、次にpath1で指定されたディレクトリを検索し、続いてpath2で指定されたディレクトリを検索して、最後に標準INCLUDEファイル用のディレクトリを検索します。
注意: ディレクトリ・パスを指定しても、Pro*COBOLは最初にカレント・ディレクトリを検索します。このため、INCLUDEするファイルがカレント・ディレクトリ以外の場所に存在する場合は、同じ名前のファイルがカレント・ディレクトリに存在しないことを確認してください。
ディレクトリ・パスを指定するための構文はシステムによって異なります。使用しているオペレーティング・システムの規則に従って指定してください。
用途
構文
IRECLEN=integer
デフォルト値
80
使用上の注意
インラインでは入力できません。
IRECLENには、ORECLENの値より大きい値は指定できません。指定可能な最大値はシステムによって異なります。
用途
LITDELIMオプションは、Pro*COBOLが生成するCOBOLコード内の文字列定数およびリテラルのデリミタを指定します。
構文
LITDELIM={APOST | QUOTE}
デフォルト値
QUOTE
使用上の注意
LITDELIM=APOSTと指定すると、Pro*COBOLはCOBOLコードを生成するときに引用符を使用します。LITDELIM=QUOTEを指定すると、次に示すように二重引用符が使用されます。
CALL "SQLROL" USING SQL-TMP0.
SQL文では、次の例に示すように、特殊文字または小文字を含んでいる識別子は二重引用符で区切る必要があります。
EXEC SQL CREATE TABLE "Emp2" END-EXEC.
また、文字列定数を区切る場合は、次の例のように引用符を使用します。
EXEC SQL SELECT ENAME FROM EMP WHERE JOB = 'CLERK' END-EXEC.
Pro*COBOLは、Pro*COBOLソース・ファイルで使用されているデリミタに関係なく、LITDELIMの値で指定されたデリミタを使用します。
用途
構文
LNAME=filename
デフォルト値
入力します。
使用上の注意
インラインでは入力できません。
デフォルトでは、リスト・ファイルはカレント・ディレクトリに作成されます。
用途
構文
LRECLEN=integer
デフォルト値
132
使用上の注意
インラインでは入力できません。
LRECLENの値の範囲は、80から132です。80未満の値を指定した場合は、80がセットされます。この範囲より大きい値を指定すると、エラーが発生します。行番号を挿入できるように、LRECLENの値がIRECLENより8以上大きくなるように指定してください。
INSERT文の実行前にバッファする必要がある行の数を制御します。
構文
max_row_insert={バッファする行の数}
デフォルト値
0
使用上の注意
0よりも大きい任意の値を指定すると、バッファ済INSERT機能が有効化され、INSERT文の実行前に多くの行がバッファされます。
用途
コンパイラの制限を超えないように、Pro*COBOLが生成する文字列リテラルの最大長を指定します。たとえば、コンパイラが132文字より長い文字列リテラルを処理できない場合は、コマンドラインにMAXLITERAL=132と指定します。
構文
MAXLITERAL=integer
デフォルト値
1024
使用上の注意
MAXLITERALに指定可能な最大値は、コンパイラによって異なります。言語ごとに異なるデフォルト値が適用されますが、このデフォルト値より小さい値を指定する必要がある場合もあります。たとえば、COBOLコンパイラの中には132文字より長い文字列リテラルを処理できないものもあります。その場合は、MAXLITERAL=132と指定します。
MAXLITERALで指定した長さを超える文字列はプリコンパイル中に分割され、実行時に再び結合(連結)されます。
MAXLITERALはインラインで入力できますが、プログラムでMAXLITERALの値を設定できるのは1回のみです。また、そのEXEC ORACLE文は最初のEXEC SQL文より前に記述する必要があります。この条件に違反すると、Pro*COBOLは警告メッセージを発行し、余分なEXEC ORACLE文あるいは誤った位置にあるEXEC ORACLE文を無視して、処理を続行します。
用途
Pro*COBOLがキャッシュに保存しておける、同時にオープンされるカーソル数を指定します。
構文
MAXOPENCURSORS=integer
デフォルト値
10
使用上の注意
MAXOPENCURSORSを使用すると、プログラムのパフォーマンスを改善できます。詳細は、付録C「パフォーマンス・チューニング」を参照してください。
個別にプリコンパイルする場合は、「分割プリコンパイル」の説明に従ってMAXOPENCURSORSを指定してください。
MAXOPENCURSORSオプションには、SQLLIBカーソル・キャッシュの初期サイズを指定します。
HOLD_CURSOR=NOのときに、暗黙的な文が実行されるか明示カーソルがクローズされると、カーソル・エントリは再利用可能とマークされます。この文が再び発行された時にカーソル・エントリが別の文に使用されていなければ、カーソルは再利用されます。
割当て済のカーソル数がMAXOPENCURSORSに満たない場合に新しいカーソルが必要になると、キャッシュに格納された次のカーソルが割り当てられます。MAXOPENCURSORSが上限を超えると、Oracleはまず1つ前のエントリの再利用を試みます。空きエントリがない場合は、追加のキャッシュ・エントリが割り当てられます。Oracleはプログラムがメモリー不足になるか、データベース・パラメータOPEN_CURSORSが上限を超えるまで、この作業を続けます。
通常の処理では、HOLD_CURSORS=NOでRELEASE_CURSOR=NO(デフォルト)を使用するときには、データ・ディクショナリで使用されるカーソルが文を処理できるように、MAXOPENCURSORSの値をOPEN_CURSORSデータベース・パラメータの値より6以上小さい値に設定しないことをお薦めします。
プログラムが同時に必要とするオープン・カーソルの数が増えて、MAXOPENCURSORSを再指定する必要がある場合もあります。45から50の値を指定することは珍しくありませんが、ユーザー・プロセスのメモリー領域にカーソル1つにつき、1つのプライベートSQL領域が必要なことに注意してください。デフォルト値の10は、大半のプログラムには適切な値です。
用途
このマクロ・オプションは、プログラムがOracleの基準に従うか、現行のANSI SQL規格に準拠するかを指定します。
構文
MODE={ANSI | ISO | ANSI14 | ISO14 | ANSI13 | ISO13 | ORACLE}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
MODE値のANSIとISO、ANSI14とISO14、ANSI13とISO13それぞれのペアの値は等価です。
MODE=ORACLE(デフォルト)のとき、埋込みSQLプログラムはOracleの動作規則に従います。
MODE={ANSI14|ANSI13}と指定した場合、プログラムはほぼ現行のANSI SQL規格に準拠します。
MODE=ANSIと指定した場合、プログラムは完全にANSI規格に準拠し、次のような変更が加えられます。
すでにオープンされているカーソルをOPENしたり、すでにクローズされているカーソルをCLOSEすることはできません。(MODE=ORACLEの場合は、再解析を避けるためにオープンされているカーソルを再オープンできます。)
Oracleが切り捨てられた列値を出力ホスト変数に割り当てた場合、エラー・メッセージは発行されません。
MODE={ANSI|ANSI14}と指定した場合、SQLCODEの4バイトの整変数またはSQLSTATEの5バイトの文字変数を宣言する必要があります。詳細は、「エラー処理の代替手段」を参照してください。
用途
ネストしたプログラムのGLOBAL句が生成されたかどうかを示します。コンパイラがネストしたプログラムをサポートしている場合は、NESTED値としてYESを使用します。
構文
NESTED={YES | NO}
デフォルト値
YES
使用上の注意
インラインでは入力できません。
用途
NLS_LOCALオプションは、グローバリゼーション・サポート(旧称「NLS」)文字変換がPro*COBOLランタイム・ライブラリまたはOracleサーバーのどちらかによって実行されるかを指定します。
構文
NLS_LOCAL={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
このオプションは、サーバーとの間で各国語キャラクタ・セット変数を受け渡しするのに使用します。
NLS_LOCAL=YESと指定した場合、マルチバイト・グローバリゼーション・サポート・データ型を持つホスト変数の空白埋込みおよび空白削除はランタイム・ライブラリ(SQLLIB)によってローカルに実行されます。リリース8.0以前のリリース用に記述されたPro*COBOLアプリケーションの場合は、引き続きこの値を使用します。
NLS_LOCAL=YESの場合、動的SQL文はプリコンパイル時には処理されないので、このオプションは動的SQL文に対して効力を持ちません。
また、NLS_LOCAL=YESのときは、マルチバイト・グローバリゼーション・サポート・データを格納する列は、埋込みデータ定義言語(DDL)文で使用できません。この制限はプリコンパイル時には適用されないため、このような列型を埋込みDDL文で使用すると、プリコンパイル・エラーではなく実行エラーが発生します。
NLS_LOCAL=NOと指定した場合は、マルチバイト・グローバリゼーション・サポート・データ型を持つホスト変数の空白埋込みおよび空白削除の操作はOracleサーバーによって行われます。新しいOracle8.0以上のアプリケーションについては、すべてこの値を使用してください。
環境変数NLS_NCHARでは、各国語キャラクタ・セットのデータで使用するキャラクタ・セット(NCHAR、NVARCHAR2、NCLOB)を指定します。指定しない場合は、NLS_LANGで直接的または間接的に定義されたキャラクタ・セットが使用されます。詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』のNLS_LANGの項を参照してください。
用途
構文
ONAME=filename
デフォルト値
システムによって異なります。
使用上の注意
インラインでは入力できません。
このオプションは、出力ファイルの名前が入力ファイルの名前と異なる場合に、出力ファイルの名前を指定するために使用します。たとえば、次のコマンドを発行したとします。
procob INAME=my_test
デフォルト出力ファイル名は、my_test.cob
です。出力ファイル名をmy_test_1.cob
にする場合は、次のコマンドを発行します。
procob INAME=my_test ONAME=my_test_1.cob
ONAMEを使用して指定するファイルには、.cob拡張子を付けてください。ONAMEオプションにはデフォルトの拡張子はありません。
注意: 出力ファイルにはデフォルト名を使用するのではなく、ONAMEオプションで明示的に指定してください。
用途
プログラムがOracle通信領域(ORACA)を使用できるかどうかを指定します。
構文
ORACA={YES | NO}
デフォルト値
NO
使用上の注意
ORACA=YESと指定した場合は、プログラムにINCLUDE ORACA文を記述する必要があります。
用途
構文
ORECLEN=integer
デフォルト値
80
使用上の注意
インラインでは入力できません。
ORECLENに指定する値は、IRECLENの値と同じか、それより大きい値にする必要があります。指定可能な最大値はシステムによって異なります。
SQL文に対してアウトラインSQLファイルを生成する必要があることを示します。
構文
outline={yes | no | category_name}
デフォルト値
無効
使用上の注意
値がyes
の場合、アウトラインSQLファイルはDEFAULTカテゴリに含まれている必要があります。生成されるアウトライン書式は次のとおりです。
DEFAULT_<filename>_<filetype>_<sequence_no>
カテゴリ名が示されている場合は、そのカテゴリにSQLファイルを生成する必要があります。この場合、生成されるアウトライン書式は次のようになります。
<category_name>_<filename>_<filetype>_<sequence_no>
値がno
の場合、アウトラインSQLファイルは生成されません。
このオプションを有効にする場合は、意味検査をフルにする必要があります。これは、オプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
アウトライン名の生成を制御します。
構文
outlnprefix={none | prefix_name}
デフォルト値
無効
使用上の注意
outlnprefix=prefix_nameの場合、アウトライン書式は次のとおりです。
<category_name>_<filename>_<filetype>
この書式は、アウトライン名の<prefix_name>
に置き換えられます。
アウトライン名が30バイトを超える場合、このオプションは接頭辞名を指定する際に有効です。
outlnprefix=noneの場合、アウトライン名はシステムによって生成されます。次の書式で生成されます。
<category_name>_<filename>_<filetype>_<sequence_no>
このオプションを有効にする場合は、意味検査をフルにする必要があります。これは、オプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneまたはoutline=falseあるいはその両方の場合は、エラーが生成されます。
PIC N変数にプラットフォームのエンディアン形式(LinuxおよびWindowsの場合はリトル・エンディアン形式、Solarisの場合はビッグ・エンディアン形式)を保持します。
構文
picn_endian={BIG | OS}
デフォルト値
BIG
使用上の注意
picn_endian=bigの場合、PIC N変数はキャラクタ・セットID AL16UTF16にバインドされます。
picn_endian=osの場合、PIC N変数はキャラクタ・セットID UCS2にバインドされます。
このオプションのデフォルト値は「big」で、現行の動作が保持されます。NLS_NCHARがAL16UTF16でない場合、このオプションは無視されます。
PIC N変数のキャラクタ・セットの形式は、既存のPro*Cobolコマンドライン・オプション(charset_picn={nchar_charset | db_charset})を使用して設定できます。
用途
PIC X変数のデフォルトのデータ型を指定します。
構文
PICX={CHARF | VARCHAR2}
デフォルト値
CHARF
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
Pro*COBOL 8.0からは、PIC X、NまたはG変数のデフォルトのデータ型がVARCHAR2からCHARFに変わりました。PICXは、下位互換性を維持するために用意されているオプションです。
新しいデフォルトの動作は、COBOLの標準の移動規則と整合がとれています。新しい方式により、PIC X変数を(MODE=ORACLEと指定して) VARCHAR2列に挿入した場合の動作が変わります。以前は後続ブランクは切り捨てられましたが、切り捨てられなくなります。また、新しいデフォルトにより、バインド変数の後続ブランクが比較の前に切り捨てられるので、WHERE句で後続ブランク付きで初期化したPIC Xバインド変数を使用すると、char列に格納された同数の後続ブランクを持つ値と一致しないという状態が少なくなります。
PICX=VARCHAR2と指定した場合、OracleはPL/SQLブロック内のローカルCHAR変数を可変長文字値のように扱います。PICX=CHARFと指定した場合は、OracleはCHAR変数をANSI準拠の固定長文字値のように扱います。詳細は、「PIC Xのデフォルト」を参照してください。
用途
このオプションを使用して一定の行数をプリフェッチすると、問合せが高速化します。
構文
PREFETCH=integer
デフォルト値
1
使用上の注意
構成ファイルまたはコマンドラインからのみ入力できます。整数値は、明示カーソルを使用する問合せの実行にすべて適用されます。このとき、優先順位のルールも適用されます。
インラインで使用するときは、明示カーソルを使用し、OPEN文の前に配置する必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。
PREFETCHのデフォルトは1です。プリフェッチをオフにするには、コマンドラインでPREFETCH=0を指定します。
LONG列およびLOB列へのアクセス中もプリフェッチはオフになります。PREFETCHを使用すると、単一行フェッチのパフォーマンスが向上します。配列フェッチを実行する場合、PREFETCHの値は割り当てた値に関係なく無効になります。
アプリケーションにおけるすべてのフェッチを支援できる完全なプリフェッチ番号はありません。
したがって、PREFETCHオプションを使用する場合は、様々な値をテストし、プログラム内の文全般にわたってパフォーマンスを向上させるものを選択してください。いくつかの文を個別にチューニングする必要がある場合は、EXEC ORACLE OPTIONを使用してPREFETCHオプションをインラインで指定します。この操作は、このコマンドの後のすべてのフェッチ文に影響を与えます。特定のFETCH文のパフォーマンスが向上するようにプリフェッチ番号を選択してください。 この個別プリフェッチ・カウントを実現するには、(コマンドラインからではなく)インラインのプリフェッチ・オプションを指定します。
最大値は9999です。詳細は、「PREFETCHプリコンパイラ・オプション」を参照してください。
用途
カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの取扱い方法を指定します。
構文
RELEASE_CURSOR={YES | NO}
デフォルト値
NO
使用上の注意
RELEASE_CURSORを使用すると、プログラムのパフォーマンスを改善できます。
SQL DML文を実行すると、その文に対応付けられたカーソルがカーソル・キャッシュ内のエントリにリンクされます。続いてカーソル・キャッシュ・エントリはOracleプライベートSQL領域にリンクされます。この領域にはSQL文の実行に必要な情報が格納されます。RELEASE_CURSORはカーソル・キャッシュとプライベートSQL領域の間のリンクで発生する処理を制御します。
RELEASE_CURSOR=YESと指定した場合、OracleがSQL文を実行してカーソルがクローズされると、Pro*COBOLはただちにリンクを削除します。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。カーソルのCLOSE時に関連リソースが確実に解放されるようにするには、RELEASE_CURSOR=YESを指定する必要があります。
RELEASE_CURSOR=NOを指定すると、リンクは保持されます。オープンされているカーソルの数がMAXOPENCURSORSの値を超えないかぎり、Pro*COBOLはリンクを再利用しません。この設定によって後に続く処理の実行速度が向上するため、これは実行頻度の高いSQL文には便利です。文を解析しなおしたり、OracleプライベートSQL領域にメモリーを割り当てる必要がないためです。
暗黙カーソルをインラインで使用する場合は、SQL文の実行前にRELEASE_CURSORを設定してください。明示カーソルをインラインで使用する場合は、カーソルをオープンする前にRELEASE_CURSORを設定してください。
RELEASE_CURSOR=YESはHOLD_CURSOR=YESをオーバーライドすることに注意してください。前述の2つのオプションの相互動作に関する詳細は、付録C「パフォーマンス・チューニング」の表C-1「HOLD_CURSORおよびRELEASE _CURSORの相互関係」を参照してください。
プリコンパイラを使用して、または後で開発者が手動で「CREATE OUTLINE」文を実行するオプションを提供します。
構文
runoutline={yes | no}
デフォルト値
無効
使用上の注意
runoutline=yesの場合は、プリコンパイルが正常に完了した後で、プリコンパイラ/トランスレータによって、生成された「CREATE OUTLINE」文が実行されます。
RUNOUTLINEを使用する場合は、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションを有効にする場合は、意味検査をフルにする必要があります。これは、オプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
用途
SELECT文で複数の行が戻されたり、ホスト配列に入りきらない数の行が戻された場合に、プログラムがエラーを発行するかどうかを指定します。
構文
SELECT_ERROR={YES | NO}
デフォルト値
YES
使用上の注意
SELECT_ERROR=YESと指定すると、1行を戻す選択で複数行が戻された場合や、配列の選択でホスト配列に入りきらない数の行が戻された場合にはエラーが発生します。
SELECT_ERROR=NOと指定すると、1行を戻す選択で複数行が戻された場合や、配列の選択でホスト配列に入りきらない数の行が戻された場合でも、エラーは発生しません。
YESを指定してもNOを指定しても、行は表から無作為に選択されます。特定の順序で行を選択する場合は、SELECT文でORDER BY句を使用してください。SELECT_ERROR=NOと指定した場合、ORDER BY句を使用すると、Oracleは最初の行を戻します。また、配列の選択の場合は最初のn行を戻します。SELECT_ERROR=YESと指定した場合は、ORDER BY句を使用してもしなくても、戻された行が多すぎる場合にはエラーが発生します。
用途
SQLCHECK=SEMANTICSまたはFULLの場合、SQL文は、解析中に一般的な文法を使用してIDLオブジェクトにパッケージ化またはバンドルされます。一般的な文法では、SQL構文は解釈されず、ホスト変数、標識変数および可能なSQL識別子のみが識別されます。意味フェーズ中に、SQLに対して行われると同じ方法で、ホスト変数および標識変数の妥当性がチェックされます。SQLに対して処理されるのと同じ方法で、表名、列名、タイプなどのセマンティクスがチェックされます。
新しく統合されたパーサーには、次の特徴があります。
既存のすべてのプリコンパイラ・アプリケーションをプリコンパイルします。
次のSQL文を完全に(SQL文のすべての句を対象に)サポートします。
SELECT文
INSERT文
DELETE文
UPDATE文
DECLARE CURSOR文のカーソル本体
構文
SQLCHECK={SEMANTICS | FULL | SYNTAX | LIMITED}
デフォルト値
SYNTAX
使用上の注意
値SEMANTICSとFULLは等価です。また、SYNTAXとLIMITEDも等価です。
Pro*COBOLは、埋込みSQL文およびPL/SQLブロックの構文と意味をチェックすると、プログラムのデバッグを支援します。検出されたエラーはプリコンパイル時にレポートされます。
チェックのレベルを制御するには、コマンドラインもしくはインライン、またはその両方でSQLCHECKオプションを入力します。ただし、インラインで指定するチェックのレベルを、コマンドラインで指定する(またはデフォルトによって受け入れる)レベルよりも高くすることはできません。
PL/SQLの予約語がSQL文で使用されていると、そのSQL文がPL/SQLでない場合でも、Pro*COBOLはエラーを発行します。PL/SQLの予約語を識別子として使用する必要がある場合は、二重引用符(")で囲んでください。
SQLCHECK=SEMANTICSと指定した場合、Pro*COBOLは次の項目を対象として構文および意味上のチェックを行います。
INSERTやUPDATEなどのDML文
PL/SQLブロック
ただし、リモートDML文(AT db_name句を使用するDML文)については、構文上のチェックのみ行われます。
Pro*COBOLは、意味検査に必要な情報を、埋め込まれたDECLARE TABLE文から取得します。また、オプションUSERIDが指定されている場合は、Oracleに接続してデータ・ディクショナリに アクセスして取得します。DML文またはPL/SQLブロックで参照される表がすべてDECLARE TABLE文で定義されていれば、Oracleに接続する必要はありません。
Oracleに接続してデータ・ディクショナリにアクセスしても見つからない情報があった場合は、DECLARE TABLE文を使用して欠けている情報を提供する必要があります。プリコンパイル時にDECLARE TABLE文の定義とデータ・ディクショナリの定義の内容が矛盾する場合は、DECLARE TABLE文の定義が使用されます。
新しいプログラムをプリコンパイルするときは、SQLCHECK=SEMANTICSを指定してください。ホスト・プログラムにPL/SQLブロックを埋め込む場合は、SQLCHECK=SEMANTICSと指定し、オプションUSERIDを指定する必要があります。
SQLCHECK=SEMANTICSまたはFULLの場合、SQL文は最初にローカルで解析されます。ホスト変数と標識変数の検証、およびSQL識別子の妥当性のチェックは、埋込みDECLARE TABLE文を使用するか、またはコマンドラインでユーザーIDを指定する際にサーバーに接続することによって実行されます。SQLCHECK = SEMANTICSまたはFULLの場合、解析は2回(プリコンパイラによって1回およびPL/SQLによって1回)実行されます。SQLで新しい構文が使用可能になった際に、新しい構文を受け入れるようにSQLのローカルの文法が更新されていないと、PL/SQLインタフェースをコールする前に新しい構文でプリコンパイラが失敗します。
SQLCHECK=SYNTAXと指定した場合、Pro*COBOLはDML文の構文チェックを行います。SQL文はローカルで解析されます。このコマンドライン・オプションで、プリコンパイラは表名または列名を検証しません。SQLCHECK=SYNTAXの場合は、クライアント側SQLインタフェースを使用してSQL文の構文がチェックされます。
意味上のチェックは行いません。DECLARE TABLE文は無視され、PL/SQLブロックは使用できません。DML文のチェックには、下位互換性のあるOracle9i構文規則が使用されます。プリコンパイル済のプログラムを移行する場合は、SQLCHECK=SYNTAXを指定してください。
表14-5に、SQLCHECKで行われる検査を示します。構文検査および意味検査の詳細は、付録D「構文および意味検査」を参照してください。
表14-5 SQLCHECKによる検査
- | SQLCHECK=SEMANTICS | - | SQLCHECK=SYNTAXの指定 | - |
---|---|---|---|---|
- |
構文 |
意味 |
構文 |
意味 |
DML |
可 |
可 |
可 |
- |
リモートDML |
可 |
- |
可 |
- |
PL/SQL |
可 |
可 |
- |
- |
統合されたパーサーの制限
Pro*COBOLの統合されたパーサーの制限事項は、次のとおりです。
Pro*COBOLでは、':'(コロン)を含まない変数はサポートされません。
表の定義は使用できません。CSFモードでは、plsqlはDECLARE TABLE
文が渡されると失敗します。
次の例で、sqlcheck=syntax
およびcommon_parser=yes
を使用すると失敗します。
select ename into :empname from emp@dblink;
以前のバージョンでは、sqlcheck=syntaxを使用すると、ローカル解析のみが実行されました。現在は、sqlcheck=syntax
およびcommon_parser=yes
の場合に、文はバンドルされてpcisyn()に送信されます。dblinkを使用する際に接続が存在しないと、PLSQLが失敗します。
前述の文は、次の形式でプリコンパイルされます。
sqlcheck=full userid=<userid> common_parser=yes
INSERTのエラー処理は、通常の順序で実行されません。XYZがグループ項目である次の文を考えてみます。
insert into emp (empno, ename) values (:XYZ)
PLSQLでは、INSERT文の構文チェック中にグループ項目または構造が許可されません(PLSQLの制限)。INSERT用にグループ項目を個々の要素に分割する必要があります。このため、プリコンパイラは、構文フェーズ自体で上述の文をinsert into emp (empno, ename) values (:b1,:b2)
に展開する必要があります。
この展開は、構文フェーズでは実行できません。このため、プリコンパイラの構文フェーズでは、他の文に対して行われるようにpcisyn()
はコールされません。文は、INSERT文のみのプリコンパイラの意味フェーズまで遅延します。最終的な影響として、エラー・メッセージは通常の順序で実行されない可能性があります。 たとえば、次のようにはできません。
EXEC SQL insert into emp (empno, ename) alues (:XYZ) END-EXEC. ^^^^^ syntax error at 'alues' EXEC SQL select ename into :empname fro emp END-EXEC. ^^^ syntax error at 'fro'
理想的なエラーの順序は、次のとおりです。
syntax error at 'alues' in INSERT syntax error at 'fro' in SELECT
前述の制限のために、エラーの順序は次のようになります。
syntax error at 'fro' in SELECT syntax error at 'alues' in INSERT
注意: 報告されるエラーには、行番号が付けられます。このため、プログラムで使用される順序と異なっても、Pro*Cobolプログラマは簡単に行を識別できます。 |
用途
構文
STMT_CACHE = 0から65535
デフォルト値
0
使用上の注意
stmt_cacheオプションを設定すると、アプリケーションでそれぞれの動的SQL文の予測数を保持できます。
用途
このMODEマイクロ・オプションでは、ANSI動的SQL方法4でANSIまたはOracleデータ型コードのどちらを使用するかを決定します。この設定は、MODEオプションの設定と同じです。
構文
TYPE_CODE={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
設定できるオプションの詳細は、表10-3を参照してください。
用途
UNSAFE_NULL=YESを指定すると、標識変数を使用せずにNULLをフェッチしてもORA-01405メッセージは生成されません。
構文
UNSAFE_NULL={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
MODE=ORACLEの場合のみ、UNSAFE_NULL=YESを設定できます。
埋込みPL/SQLブロックのホスト変数ではUNSAFE_NULLオプションは何の効果もありません。ORA-01405エラーの発生を避けるために、必ず標識変数を使用してください。
UNSAFE_NULL=YESと指定すると、SELECT文またはFETCH文でNULLが選択され、出力ホスト変数に対応する標識変数がない場合でも、エラーは戻されません。UNSAFE_NULL=NOと指定した場合、対応する標識変数のないホスト変数にNULLの列または式を選択またはフェッチすると、エラーが発生します(SQLSTATEは22002
に、SQLCODEはORA-01405に設定されます)。
用途
構文
USERID=username/password[@dbname]
デフォルト値
なし
使用上の注意
インラインでは入力できません。
SQLCHECK=SEMANTICSと指定した場合に、Oracleに接続してデータ・ディクショナリにアクセスすることによりPro*COBOLが必要な情報を得られるようにする場合は、USERIDも指定してください。データベース別名はオプションです。大カッコは、入力しないでください。
用途
VARCHARオプションは、第5章「埋込みSQL」で説明したCOBOLのグループ項目をVARCHARデータ型として扱うようにPro*COBOLに指示します。
構文
VARCHAR={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
VARCHAR=YESと指定した場合、第5章「埋込みSQL」で説明した暗黙的なグループ項目を、長さフィールドおよび文字列フィールドを持つVARCHAR外部データ型として受け入れます。
VARCHAR=NOと指定した場合、Pro*COBOLは暗黙的なグループ項目をVARCHAR外部データ型として受け入れません。