14 プリコンパイラのオプション
この章ではPro*COBOLのプリコンパイラ・オプションを説明します。この章の内容は次のとおりです。
14.1 procobコマンド
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
14.1.1 大/小文字の区別
一般に、コマンドライン・オプションの名前および値には、大文字と小文字のどちらも使用できます。ただし、大/小文字を区別するオペレーティング・システム(UNIXなど)を使用している場合は、Pro*COBOLの実行可能ファイルの名前も含めて、ファイル名は大文字と小文字を正しく組み合せて指定してください。
注意: ファイル名などのように、特定のオペレーティング・システム・オブジェクトを指定しないオプション名やオプション値では、大文字と小文字は区別されません。このマニュアル中の例では、オプション名は大文字または小文字で記述し、オプション値は通常は小文字で記述しています。ファイル名を指定する場合は、Pro*COBOLの実行可能ファイルも含めて、それを実行するオペレーティング・システムの大/小文字区別の規則に従ってください。
UNIX Cシェルなどの一部のオペレーティング・システムおよびユーザー・シェルでは、?
の前にバックスラッシュ(\)などのエスケープ文字を指定する必要があります。たとえば、Pro*COBOLオプションの設定値を表示するには、procob ?
のかわりに、procob \?
を使用する必要があります。
プラットフォーム固有のマニュアルを参照してください。
14.2 プリコンパイル時のアクション
Pro*COBOLは、プリコンパイル中に、ホスト・プログラムに埋め込まれたSQL文に置き換わるCOBOLのコードを生成します。生成されたコードには、各ホスト変数のデータ型、長さ、アドレスなどデータ構造の他、Oracleランタイム・ライブラリSQLLIBが必要とするその他の情報が組み込まれています。またこのコードには、埋込みSQLの処理を実行するSQLLIBルーチンのコールも入っています。
Pro*COBOLは警告やエラー・メッセージを発行することがあります。これらのメッセージは、『Oracle Databaseエラー・メッセージ』で説明されています。
14.3 オプションについて
プリコンパイル時には数多くの便利なオプションを使用できます。それらを使用して、リソースの使用、エラーの報告、入出力の書式化およびカーソルの管理を制御できます。
オプションの値はリテラルであり、テキストまたは数値を表します。たとえば、次のオプションを指定するとします。
... 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
オンライン画面には、各オプションの名前および、構文、デフォルト値および用途が表示されます。アスタリスク(*)が付いたオプションは、コマンドラインでもインラインでも指定できます。
14.3.1 オプション値の優先順位
オプションの値は、次の値によって決まります(下にいくほど優先順位が高くなります)。
-
Pro*COBOLに組み込まれているデフォルト値
-
システム構成ファイルで設定された値
-
ユーザー構成ファイルで設定された値
-
コマンドラインに入力された値
-
インライン指定で設定された値セット
たとえば、MAXOPENCURSORSオプションでは、キャッシュ内のオープン・カーソルの最大数を指定します。このオプションのPro*COBOLに組み込まれたデフォルト値は10です。ただし、システム構成ファイルでMAXOPENCURSORS=32と指定されていると、値は32になります。ユーザー構成ファイルでは、これをさらに別の値に設定でき、これはシステム構成ファイルの値より優先されます。
MAXOPENCURSORSオプションをコマンドラインで設定した場合には、新しいコマンドラインの値が優先されます。最終的には、インライン指定が前述のすべてのデフォルト値よりも優先されます。詳細は、「プリコンパイラ・オプションの入力」を参照してください。
関連項目
14.3.2 マクロ・オプションおよびマイクロ・オプション
オプションMODEはマクロ・オプションとも呼ばれます。END_OF_FETCHなどのより新しいオプションは1つの関数のみを制御し、マイクロ・オプションとして知られています。マクロ・オプションおよびマイクロ・オプションを設定するときは、マクロ・オプションがマイクロ・オプションより優先されることに注意してください。ただしこの点は、マクロ・オプションにマイクロ・オプションより高い優先順位が付いている場合のみ、注意する必要があります。(「オプション値の優先順位」の項に説明が記載されています。)この動作は、Pro*COBOL 8.0より前のリリースとは異なります。
たとえば、デフォルトはMODEはORACLEでEND_OF_FETCHは1403です。ユーザー構成ファイルにMODE=ANSIを指定した場合は、Pro*COBOLからフェッチの最後に値100が戻され、END_OF_FETCHのデフォルト値1403が上書きされます。この構成ファイルにMODE=ANSIおよびEND_OF_FETCH=1403を両方指定した場合は、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 |
関連項目
14.3.3 カレント値の判別
コマンドラインで疑問符(?)を使用すると、複数のオプションのカレント値を対話形式で調べることができます。たとえば、次のコマンドを発行したとします。
procob ?
すべてのオプションの設定およびそのカレント値が端末に表示されます。この場合、表示される値はPro*COBOLに組み込まれている値ですが、システム構成ファイルに値が指定されている場合は構成ファイル内の値が表示されます。一方、次のコマンドを発行したとします。
procob CONFIG=my_config_file.cfg ?
これでカレント・ディレクトリにmy_config_file.cfg
というファイルがあると、my_config_file.cfg
ファイルのオプションが、その他のデフォルト値とともに表示されます。不足している値はユーザー構成ファイル内の値によって補われ、これらの値はPro*COBOLに組み込まれている値や、システム構成ファイルで指定されている値に優先します。
次のようにオプション名の後に=?
を指定して、シングル・オプションのカレント値を指定することもできます。
procob MAXOPENCURSORS=?
14.4 プリコンパイラ・オプションの入力
CONFIG以外のPro*COBOLのオプションはすべて、コマンドラインまたは構成ファイルから入力できます。また、インラインで入力できるオプションも多数あります。Pro*COBOLは実行時に、これら3つのソースのオプションをすべて受け入れます。
14.4.1 コマンドライン
... [option_name=value] [option_name=value] ...
を使用して、コマンドラインからプリコンパイラ・オプションを入力できます。
オプションとオプションの間は、1つ以上の空白で区切ります。たとえば、次のようにオプションを入力できます。
... ERRORS=no LTYPE=short
14.4.2 インライン
次の構文を使用してEXEC ORACLE OPTION文を記述すると、オプションをインライン入力できます。
EXEC ORACLE OPTION (option_name=value) END-EXEC.
たとえば、次のような文をコーディングできます。
EXEC ORACLE OPTION (RELEASE_CURSOR=YES) END-EXEC.
インラインでオプションを入力すると、コマンドラインから入力された同じオプションは無効になります。
14.4.2.1 利点
EXEC ORACLE機能は、プリコンパイル中にオプション値を変更する場合に特に便利です。たとえば、文ごとにHOLD_CURSOR値およびRELEASE_CURSOR値を変更することがあります。インライン・オプションを使用して実行時のパフォーマンスを最適化する方法については、「パフォーマンス・チューニング」を参照してください。
インラインでのオプションの指定は、オペレーティング・システムでコマンドラインでの入力文字数が制限されている場合にも便利であり、インライン・オプションは構成ファイルに格納できます。これらの制限を次の項で説明します。
関連項目
14.4.2.2 EXEC ORACLEのスコープ
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. ...
14.4.3 構成ファイル
構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイルのそれぞれのレコード(行)には、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は構成ファイル内では有効なオプションではありません。
関連項目
14.4.4 列プロパティのサポート
列プロパティは8バイトの値で戻され、各ビットが1つの列プロパティを示します。3つの列プロパティがサポートされています。
+---------------------------------------------------+ ! 32 |..............| 10 | 9 | 8 |......| 3 | 2 | 1 | +---------------------------------------------------+ | | | | | |-> auto-increment column | |-> auto value always generated |-> if generated by default when null
列プロパティは、新しいSQLDAメンバー(sqlda->CP[]
)を使用して動的文から取得できます。
01 SELDSC. 02 SQLDNUM PIC S9(9) COMP VALUE 20. 02 SQLDFND PIC S9(9) COMP. 02 SELDVAR OCCURS 20 TIMES. 03 SELDV PIC S9(9) COMP. 03 SELDFMT PIC S9(9) COMP. 03 SELDVLN PIC S9(9) COMP. 03 SELDFMTL PIC S9(4) COMP. 03 SELDVTYP PIC S9(4) COMP. 03 SELDI PIC S9(9) COMP. 03 SELDH-VNAME PIC S9(9) COMP. 03 SELDH-MAX-VNAMEL PIC S9(4) COMP. 03 SELDH-CUR-VNAMEL PIC S9(4) COMP. 03 SELDI-VNAME PIC S9(9) COMP. 03 SELDI-MAX-VNAMEL PIC S9(4) COMP. 03 SELDI-CUR-VNAMEL PIC S9(4) COMP. 03 SELDFCLP PIC S9(9) COMP. 03 SELDFCRCP PIC S9(9) COMP. 02 SQLDSCCP OCCURS 20 TIMES PIC S9(18) COMP-5.
このメンバーSQLDSCCP
は、メタデータDESCRIBEの一部として更新されます。
列プロパティは、新しい関数SQLGetColProp()
を使用した静的文で取得できます(この関数は最後に実行された文から列プロパティを取得します)。
void SQLGetColProp( void *uga, --> IN -- run time context text *coln, --> IN -- column name ub2 *colatr, --> IN -- column attributes ub8 *colprop --> IN/OUT -- column attribute/ub8 value that holds column properties )
SQLGetColProp()
は、列属性colatr
で決定された値を戻します。
-
SQL_ATTR_COL_PROPERTIES: 指定した列の列プロパティを含む、8バイトの値(
colprop
)を戻します。 -
SQL_ATTR_COL_PROPERTY_IS_IDENTITY
colprop
は、指定した列がID列の場合にtrueになります。 -
SQL_ATTR_COL_PROPERTY_IS_GEN_ALWAYS
colprop
は、指定した列が常に自動増分値を生成する場合にtrueになります。 -
SQL_ATTR_COL_PROPERTY_IS_GEN_BY_DEF_ON_NULL
colprop
は、指定した列がデフォルトnull列制約である場合に自動増分値を生成するときは、trueになります。
14.5 プリコンパイラ・オプションのスコープ
プリコンパイル・ユニットは、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.6 クイック・リファレンス
次の表は、Pro*COBOLオプションのクイック・リファレンスを示しています。アスタリスクが付いているオプションは、インラインで入力できます。
また、オンラインでも簡単な参照ができます。オンライン画面でPro*COBOLオプションを表示するには、オペレーティング・システムのプロンプトに、オプションを指定せずにPro*COBOLコマンドを入力します。オンライン画面には、各オプションの名前および、構文、デフォルト値および用途が表示されます。
注意:
プラットフォーム固有のオプションもいくつかあります。たとえば、バイトスワップ・プラットフォームでは、オプションCOMP5によってCOMPUTATIONAL項目の使用を管理します。使用しているシステム固有のOracleマニュアルを参照してください。
SPARC Solaris 64ビット・コンピュータでは、COMP5はサポートされません。かわりにCOMPを使用します。
機能25546にCWH_SQL99オプションが追加されたか。
表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 |
(なし) |
ユーザー定義構成ファイルの名前を指定します。 |
CWH_SQL99={YES | NO} |
YES |
YESの場合は、使用しているカーソルをROLLBACK時にクローズします(標準SQLの動作)。 |
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 * |
256 |
文字列の最大長。(IBM独自のS370 OSでは120) |
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変数のデータ型。 |
PLAN_BASELINE={module_name | YES | NO} |
NO |
モジュール名を指定してSQL計画ベースラインを作成します。 |
PLAN_PREFIX={prefix_name| none} |
なし |
計画名が128バイト以内であることを確認します。 |
PLAN_RUN={YES | NO} |
NO |
生成されたSQLファイルを実行します。 |
PLAN_FIXED={YES | NO} |
YES |
作成した計画ベースラインが固定であるか、非固定であるかを指定します。 |
PLAN_ENABLED={YES | NO} |
YES |
作成される計画ベースラインを有効にします。 |
MEMFORPREFETCH=0から4294967294 |
なし |
指定メモリーに格納する行をプリフェッチすることで問合せを高速化します。 |
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の場合は、リスト・ファイル内に記号のクロス・リファレンスを生成します。 |
14.7 Pro*COBOLプリコンパイラ・オプションの使用
この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。Pro*COBOLプリコンパイラ・オプションをアルファベット順に示し、各オプションごとに用途、構文およびデフォルト値を記載してあります。さらに「使用上の注意」で、オプションについて説明します。使用上の注意に特に記載がない場合、そのオプションはコマンドライン、インラインまたは構成ファイルのどの方法でも入力できます。
14.7.2 ASSUME_SQLCODE
用途
構文
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が宣言されているものとみなします。
14.7.3 AUTO_CONNECT
用途
構文
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文を使用する必要があります。
14.7.4 CHARSET_PICX
用途
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の場合は、一部のデータが失われる可能性があります。
14.7.5 CHARSET_PICN
用途
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の場合は、パフォーマンスに影響を及ぼす可能性があります。
14.7.6 CLOSE_ON_COMMIT
用途
構文
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を発行すると、すべてのカーソルがクローズします。
このオプションの優先順位の詳細は、「マクロ・オプションおよびマイクロ・オプション」を参照してください。
14.7.7 COMMON_PARSER
用途
SQL99構文のSELECT、INSERT、DELETE、UPDATEおよびDECLARE CURSOR文のカーソル本体がサポートされます。
構文
COMMON_PARSER={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインで入力できます。
14.7.9 DATE_FORMAT
用途
構文
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」などの日付書式モデルです。日付書式モデル要素のリストは、「日時書式の要素」を参照してください。
DATE_FORMATオプションの使用において、制約が1つあります。互いにリンクされたコンパイル・ユニットはすべて、同じDATE_FORMAT値を使用する必要があります。コンパイル・ユニットのDATE_FORMATの値が一致しない場合、エラーが発生します。
14.7.12 DECLARE_SECTION
用途
宣言部内の宣言のみホスト変数として使用するかどうかを指定します。
構文
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文で宣言した変数のみ、ホスト変数として使用できます。)このオプションの優先順位の詳細は、「オプション値の優先順位」を参照してください。
関連項目
14.7.13 DEFINE
用途
構文
DEFINE=symbol
デフォルト値
なし。
使用上の注意
DEFINEをインラインで入力する場合のEXEC ORACLE文の書式は次のとおりです。
EXEC ORACLE DEFINE symbol END-EXEC.
関連項目
14.7.14 DYNAMIC
用途
構文
DYNAMIC={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
EXEC ORACLE OPTION文を使用してインラインで入力することはできません。
DYNAMICオプションの設定については、「ANSI動的SQLのプリコンパイラ・オプション」を参照してください。
14.7.15 END_OF_FETCH
用途
この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を戻します。
14.7.17 File_ID
用途
生成されたCOBOLファイルの一意の識別子を示します。生成されたファイルには、「SQLCTX」変数と関連付けられた一意の数値が含まれます。file_idオプションを使用すると、SQLCTX変数の値を設定できます。このオプションは、複数のソース・ファイルをプリコンパイルする際に有効で、ユーザーは生成された異なるファイルと関連付けられた一意のSQLCTX値を確保できます。
構文
FILE_ID=0から65535
デフォルト値
0
使用上の注意
file_idオプションを使用すると、生成されたCOBOLファイルの「SQLCTX」変数に直接値を割り当てることができます。
14.7.18 FIPS
用途
ANSI/ISO SQLの拡張機能に(FIPSフラガーによって)フラグを付けるかどうかを指定します。拡張機能とは、ANSI/ISOの形式または構文規則(権限付与規則は除く)に従っていないSQL要素のことです。
構文
FIPS={YES | NO}
デフォルト値
NO
使用上の注意
FIPS=YESの場合は、エントリ・レベルのSQL-92に対してOracle拡張機能を使用したり、エントリ・レベルのSQL-92の機能を規格に準拠しない方法で使用すると、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ラベルおよびホスト変数の前に付けるオプションのコロン
14.7.19 FORMAT
用途
構文
FORMAT={ANSI | TERMINAL | VARIABLE}
デフォルト値
ANSI
使用上の注意
インラインでは入力できません。
入力行の書式はシステムによって異なります。システム固有のOracleのマニュアルまたはCOBOLコンパイラをチェックしてください。
FORMAT=ANSIと指定した場合、入力行の書式はCOBOLに関する現行のANSI規格にできるかぎり準拠しているものと解釈されます。FORMAT=TERMINALと指定した場合、入力行は列1から始まります。このマニュアルのサンプル・コードはTERMINAL書式内にあります。FORMAT=VARIABLEを使用すると、B領域な長さの柔軟性が許可されます。詳細は、「コーディング領域」を参照してください。
関連項目
14.7.20 HOLD_CURSOR
用途
構文
HOLD_CURSOR={YES | NO}
デフォルト値
NO
使用上の注意
HOLD_CURSORを使用すると、プログラムのパフォーマンスを改善できます。詳細は、「パフォーマンス・チューニング」を参照してください。
SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリは、文の処理に必要な情報が格納されるOracleプライベート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オプションの相互作用の詳細は、「パフォーマンス・チューニング」を参照してください。
関連項目
14.7.22 IMPLICIT_SVPT
用途
新しくバッチ処理された挿入を開始する前に、暗黙的なセーブポイントを設定するかどうかを制御します。
構文
implicit_svpt={YES|NO}
デフォルト値
NO
使用上の注意
YESの場合は、新しい行のバッチを開始する前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的な「セーブポイントへのロールバック」が実行されます。このオプションは、DB2との互換性のために用意されていますが、余分なラウンドトリップとなるためマイナス面であることは明らかです。
NOの場合は、暗黙的なセーブポイントが設定されません。バッファ済INSERTでエラーが発生すると、アプリケーションに通知されますが、ロールバックは実行されません。
14.7.23 INAME
用途
構文
INAME=filename
デフォルト値
なし。
使用上の注意
インラインでは入力できません。
プリコンパイル時は、すべての入力ファイル名を一意にする必要があります。
コマンドラインから入力ファイルの名前を指定する場合は、キーワードINAMEは省略できます。たとえば、Pro*COBOLでは、INAME=myprog.pcoと指定するかわりにmyprog.pcoと指定できます。
このように、INAMEの指定でファイル拡張子を使用する必要はありません(ただし、ファイル拡張子が標準以外の場合には拡張子を指定する必要があります)。UNIXプラットフォームでは、Pro*COBOLはデフォルトの入力ファイル拡張子pcoを使用します。
14.7.24 INCLUDE
用途
構文
INCLUDE=path
デフォルト値
現在のディレクトリ
使用上の注意
Pro*COBOLは、最初にカレント・ディレクトリを検索し、次にINCLUDEで指定されたディレクトリを検索して、最後に標準INCLUDEファイル用のディレクトリを検索します。このため、標準ファイルのディレクトリ・パスを指定する必要はありません。
しかし、標準以外のファイルについては、カレント・ディレクトリに格納されている場合を除いて、INCLUDEを使用してディレクトリ・パスを指定する必要があります。次に示すように、コマンドラインに複数のパスを指定できます。
... INCLUDE=path1 INCLUDE=path2 ...
Pro*COBOLは、最初にカレント・ディレクトリを検索し、次にpath1で指定されたディレクトリを検索し、続いてpath2で指定されたディレクトリを検索して、最後に標準INCLUDEファイル用のディレクトリを検索します。
注意: ディレクトリ・パスを指定しても、Pro*COBOLは最初にカレント・ディレクトリを検索します。このため、INCLUDEするファイルがカレント・ディレクトリ以外の場所に存在する場合は、同じ名前のファイルがカレント・ディレクトリに存在しないことを確認してください。
ディレクトリ・パスを指定するための構文はシステムによって異なります。使用しているオペレーティング・システムの規則に従って指定してください。
14.7.26 LITDELIM
用途
構文
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の値で指定されたデリミタを使用します。
14.7.30 MAX_ROW_INSERT
用途
INSERT文の実行前にバッファする必要がある行の数を制御します。
構文
max_row_insert={0から1000}
デフォルト値
0
使用上の注意
0よりも大きい任意の値を指定すると、バッファ済INSERT機能が有効化され、INSERT文の実行前に多くの行がバッファされます。
14.7.31 MAXLITERAL
用途
コンパイラの制限を超えないように、Pro*COBOLが生成する文字列リテラルの最大長を指定します。たとえば、コンパイラが132文字より長い文字列リテラルを処理できない場合は、コマンドラインにMAXLITERAL=132と指定します。
構文
MAXLITERAL=integer
デフォルト値
1024
使用上の注意
MAXLITERALの最大値は、コンパイラによって異なります。デフォルト値は言語によって異なりますが、このデフォルト値より小さい値を指定する必要がある場合があります。たとえば、一部のCOBOLコンパイラでは、132文字より長い文字列リテラルを処理できないため、その場合はMAXLITERAL=132と指定します。
MAXLITERALで指定した長さを超える文字列はプリコンパイル中に分割され、実行時に再び結合(連結)されます。
インラインでMAXLITERALを入力することはできますが、プログラムで値を設定できるのは1回のみで、EXEC ORACLE文を最初のEXEC SQL文の前に指定する必要があります。指定しない場合、Pro*COBOLは警告メッセージを発行し、余分または誤って指定したEXEC ORACLE文を無視して、処理を続行します。
14.7.32 MAXOPENCURSORS
用途
構文
MAXOPENCURSORS=integer
デフォルト値
10
使用上の注意
MAXOPENCURSORSを使用すると、プログラムのパフォーマンスを改善できます。詳細は、「パフォーマンスのチューニング」を参照してください。
個別にプリコンパイルする場合は、「分割プリコンパイル」の説明に従って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は、大半のプログラムには適切な値です。
関連項目
14.7.33 MODE
用途
構文
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バイトの文字変数を宣言する必要があります。詳細は、「エラー処理の代替方法」を参照してください。
関連項目
14.7.34 NESTED
用途
ネストしたプログラムのGLOBAL句が生成されたかどうかを示します。コンパイラがネストしたプログラムをサポートしている場合は、NESTED値としてYESを使用します。
構文
NESTED={YES | NO}
デフォルト値
YES
使用上の注意
インラインでは入力できません。
14.7.35 NLS_LOCAL
用途
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で間接的に定義済のキャラクタ・セットが使用されます。詳細は、「グローバリゼーション・サポート環境の設定」を参照してください。
14.7.36 ONAME
用途
構文
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オプションで明示的に指定してください。
14.7.39 OUTLINE
用途
SQL文に対してアウトラインSQLファイルを生成する必要があることを示します。
構文
outline={yes | no | category_name}
デフォルト値
no
使用上の注意
値がyes
の場合、アウトラインSQLファイルはDEFAULTカテゴリに含まれている必要があります。生成されるアウトライン書式は次のとおりです。
DEFAULT_<filename>_<filetype>_<sequence_no>
カテゴリ名が示されている場合は、そのカテゴリにSQLファイルを生成する必要があります。この場合、生成されるアウトライン書式は次のようになります。
<category_name>_<filename>_<filetype>_<sequence_no>
値がno
の場合、アウトラインSQLファイルは生成されません。
このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
14.7.40 OUTLNPREFIX
用途
アウトライン名の生成を制御します。
構文
outlnprefix={none | prefix_name}
デフォルト値
no
使用上の注意
outlnprefix=prefix_nameの場合、アウトライン書式は次のとおりです。
<category_name>_<filename>_<filetype>
この書式は、アウトライン名の<prefix_name>
に置き換えられます。
アウトライン名が128バイトを超える場合、このオプションは接頭辞名を指定する際に有効です。
outlnprefix=noneの場合、アウトライン名はシステムによって生成されます。次の書式で生成されます。
<category_name>_<filename>_<filetype>_<sequence_no>
このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneまたはoutline=false(あるいはその両方)の場合、エラーが生成されます。
14.7.42 PICN_ENDIAN
用途
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})を使用して設定できます。
14.7.43 PICX
用途
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のデフォルト」を参照してください。
関連項目
14.7.44 PLAN_BASELINE
用途
モジュール名を指定してSQL計画ベースラインを作成します。
構文
PLAN_BASELINE={module_name | YES | NO}
デフォルト値
NO
使用上の注意
このモジュール名の後にファイル名、ファイル・タイプおよび順序番号が付いて、一意の計画名が生成されます。
14.7.45 PLAN_PREFIX
用途
計画名が128バイト以内であることを確認します。
構文
PLAN_PREFIX={prefix_name| none}
デフォルト値
なし
使用上の注意
これはオプションです。デフォルトはnoneで、接頭辞名が使用されないことを意味し、計画名が128バイトを超えるとエラー・メッセージが生成されます。
14.7.46 PLAN_RUN
用途
生成されたSQLファイルを実行します。
構文
PLAN_RUN={YES | NO}
デフォルト値
NO
使用上の注意
PLAN_RUNオプションを設定しない場合、生成されるSQLファイルは実行されません。
14.7.47 PLAN_FIXED
用途
作成した計画ベースラインが固定であるか、非固定であるかを指定します。
構文
PLAN_FIXED={ YES | NO }
デフォルト値
YES
使用上の注意
NOを設定すると、非固定の計画ベースラインが作成されます。
14.7.48 PLAN_ENABLED
用途
作成された計画ベースラインの使用を有効にします。
構文
PLAN_ENABLED={ YES | NO }
デフォルト値
YES
使用上の注意
デフォルトの設定では、計画の選択時に、作成された計画ベースラインが使用されます。NOを設定すると、計画ベースラインが作成されますが、手動で有効にするまで使用されません。
14.7.49 MEMFORPREFETCH
用途
このオプションを使用すると、指定したメモリーに格納可能な行数をプリフェッチすることによって、問合せが高速化します。
構文
MEMFORPREFETCH=integer
デフォルト値
値は設定されていません。
使用上の注意
このオプションは、構成ファイルまたはコマンドラインで使用できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。
インラインで使用するときは、明示カーソルを使用し、OPEN文の前に配置する必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインMEMFORPREFETCHオプションによって決まります。
MEMFORPREFETCHは、デフォルトでは値が設定されていません。プリフェッチをオフにするには、コマンドラインでMEMFORPREFETCH=0を使用します。
LONG列およびLOB列へのアクセス中もプリフェッチはオフになります。MEMFORPREFETCHを使用すると、単一行フェッチのパフォーマンスが向上します。配列フェッチを実行する場合、MEMFORPREFETCHの値は割り当てた値に関係なく無効になります。
アプリケーションにおけるすべてのフェッチを支援できる完全なプリフェッチ・メモリー値はありません。
したがって、MEMFORPREFETCHオプションを使用する場合は、様々な値をテストし、プログラム内のすべての文にわたってパフォーマンスが向上する値を選択してください。いくつかの文を個別にチューニングする必要がある場合は、EXEC ORACLE OPTIONを使用してMEMFORPREFETCHオプションをインラインで指定します。この操作は、このコマンドの後のすべてのフェッチ文に影響を与えます。特定のFETCH文のパフォーマンスが向上するようにプリフェッチ・メモリーを選択してください。この個別プリフェッチ・カウントを実現するには、(コマンドラインからではなく)インラインのプリフェッチ・オプションを指定します。
14.7.50 PREFETCH
用途
構文
PREFETCH=integer
デフォルト値
1
使用上の注意
構成ファイルまたはコマンドラインで入力できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。
インラインで使用するときは、明示カーソルを使用し、OPEN文の前に配置する必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。
PREFETCHのデフォルトは1です。プリフェッチをオフにするには、コマンドラインでPREFETCH=0を指定します。
LONG列およびLOB列へのアクセス中もプリフェッチはオフになります。PREFETCHを使用すると、単一行フェッチのパフォーマンスが向上します。配列フェッチを実行する場合、PREFETCHの値は割り当てた値に関係なく無効になります。
アプリケーションにおけるすべてのフェッチを支援できる完全なプリフェッチ番号はありません。
したがって、PREFETCHオプションを使用する場合は、様々な値をテストし、プログラム内の文全般にわたってパフォーマンスを向上させるものを選択してください。特定の文を個別にチューニングする必要がある場合は、EXEC ORACLE OPTIONを使用してPREFETCHオプションをインラインで指定します。この操作は、プログラム内でこのコマンドに続くすべてのフェッチ文に影響を与えます。特定のFETCH文のパフォーマンスが向上するようにプリフェッチ番号を選択してください。この個別プリフェッチ・カウントを実現するには、インラインのプリフェッチ・オプションを指定します。(コマンドラインからではなく。)
最大値は9999です。詳細は、「PREFETCHプリコンパイラ・オプション」を参照してください。
14.7.51 RELEASE_CURSOR
用途
構文
RELEASE_CURSOR={YES | NO}
デフォルト値
NO
使用上の注意
RELEASE_CURSORを使用すると、プログラムのパフォーマンスを改善できます。詳細は、次の項を参照してください。
SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリは、文の処理に必要な情報が格納されるOracleプライベート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つのオプションの相互作用の詳細は、「パフォーマンス・チューニング」を参照してください。
関連項目
14.7.52 RUNOUTLINE
用途
プリコンパイラを使用して、または後で開発者が手動で「CREATE OUTLINE」文を実行するオプションを提供します。
構文
runoutline={yes | no}
デフォルト値
no
使用上の注意
runoutline=yesの場合は、プリコンパイルが正常に完了した後で、プリコンパイラ/トランスレータによって、生成された「CREATE OUTLINE」文が実行されます。
RUNOUTLINEを使用する場合は、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
14.7.53 SELECT_ERROR
用途
構文
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句の有無を問わず、戻る行数が多すぎる場合にエラーが生成されます。
14.7.54 SQLCHECK
用途
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により構文上のチェックのみ行われます。
Pro*COBOLは、意味検査に必要な情報を、埋め込まれたDECLARE TABLE文から取得します。また、オプションUSERIDが指定されている場合は、Oracleに接続してデータ・ディクショナリにアクセスするとこの情報を取得します。データ操作文や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文のチェックには、Pro*COBOLは下位互換性のあるOracle構文規則を使用します。プリコンパイル済のプログラムを移行する場合は、SQLCHECK=SYNTAXを指定してください。
表14-5に、SQLCHECKで行われる検査を示します。構文検査および意味検査の詳細は、「構文および意味検査」を参照してください。
表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プログラマは簡単に行を識別できます。
関連項目
14.7.57 UNSAFE_NULL
用途
構文
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に設定されます)。
14.7.59 VARCHAR
用途
構文
VARCHAR={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
VARCHAR=YESと指定した場合、「埋込みSQL」で説明した暗黙的なグループ項目を、長さフィールドおよび文字列フィールドを持つVARCHAR外部データ型として受け入れます。
VARCHAR=NOと指定した場合、Pro*COBOLは暗黙的なグループ項目をVARCHAR外部データ型として受け入れません。
関連項目