ヘッダーをスキップ
Pro*COBOL®プログラマーズ・ガイド
11gリリース2(11.2)
E50141-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

14 プリコンパイラのオプション

この章ではPro*COBOLのプリコンパイラ・オプションを説明します。この章の内容は、次のとおりです。

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

大/小文字区別

一般に、コマンドライン・オプションの名前および値には、大文字と小文字のどちらも使用できます。ただし、大/小文字を区別するオペレーティング・システム(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つの関数のみを制御し、マイクロ・オプションとして知られています。マクロ・オプションおよびマイクロ・オプションを設定するときは、マクロ・オプションがマイクロ・オプションより優先されることに注意してください。ただしこの点は、マクロ・オプションにマイクロ・オプションより高い優先順位が付いている場合のみ、注意する必要があります。(「オプション値の優先順位」の項に説明が記載されています。)この動作は、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


カレント値の決定

コマンドラインで疑問符(?)を使用すると、複数のオプションのカレント値を対話形式で調べることができます。たとえば、次のコマンドを発行したとします。

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文は、同一オプションを指定した別の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マニュアルを参照してください。

SPARC Solaris 64ビット・コンピュータでは、COMP5はサポートされません。かわりにCOMPを使用します。


表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変数のデータ型。

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プリコンパイラ・オプションの使用

この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。Pro*COBOLプリコンパイラ・オプションをアルファベット順に示し、各オプションごとに用途、構文およびデフォルト値を記載してあります。さらに「使用上の注意」で、オプションについて説明します。使用上の注意に特に記載がない場合、そのオプションはコマンドライン、インラインまたは構成ファイルのどの方法でも入力できます。

ASACC

用途

リスト・ファイルがASA規則に従って、キャリッジ制御のために各行の最初の桁を使用するかどうかを指定します。

構文

ASACC={YES | NO}

デフォルト値

NO

使用上の注意

インラインでは入力できません。

ASSUME_SQLCODE

用途

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

用途

プログラムをデフォルトのユーザー・アカウントに自動的に接続するかどうかを指定します。

構文

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文を使用する必要があります。

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の場合は、一部のデータが失われる可能性があります。

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の場合は、パフォーマンスに影響を及ぼす可能性があります。

CLOSE_ON_COMMIT

用途

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を発行すると、すべてのカーソルがクローズします。

このオプションの優先順位の詳細は、「マクロ・オプションおよびマイクロ・オプション」を参照してください。

COMMON_PARSER

用途

SQL99構文のSELECT、INSERT、DELETE、UPDATEおよびDECLARE CURSOR文のカーソル本体がサポートされます。

構文

COMMON_PARSER={YES | NO}

デフォルト値

NO

使用上の注意

コマンドラインで入力できます。

CONFIG

用途

ユーザー構成ファイルの名前を指定します。

構文

CONFIG=filename

デフォルト値

なし

使用上の注意

コマンドラインでのみ入力できます。

Pro*COBOLは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。ユーザー構成ファイルと呼ばれる代替ファイルも指定できます。詳細は、「プリコンパイラ・オプションの入力」を参照してください。

構成ファイルはネストできません。したがって、構成ファイルはオプションCONFIGを指定できません。

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」などの日付書式モデルです。日付書式モデル要素の一覧は、『Oracle Database SQL言語リファレンス』を参照してください。

DATE_FORMATオプションの使用において、制約が1つあります。互いにリンクされたコンパイル・ユニットはすべて、同じDATE_FORMAT値を使用する必要があります。コンパイル・ユニットのDATE_FORMATの値が一致しない場合、エラーが発生します。

DB2_ARRAY

用途

このオプションに基づいて、プリコンパイラは追加の配列INSERTおよび配列SELECT構文をアクティブにします。

構文

DB2_ARRAY={YES |NO}

デフォルト値

NO

使用上の注意

このオプションをNOに設定すると、Oracleプリコンパイラの構文がサポートされます。それ以外の場合は、DB2の配列INSERTおよび配列SELECT構文がサポートされます。

DBMS

用途

Oracleの意味上および構文上の規則を、Oracle7データベース、Oracle8iまたはOracleのネイティブ・バージョン(アプリケーションが接続されているバージョン)のうちどの規則に合わせるかを指定します。

構文

DBMS={V7 | V8 | NATIVE}

デフォルト値

NATIVE

使用上の注意

インラインでは入力できません。

DBMSオプションを使用して、Oracleのバージョン固有の動作を制御できます。DBMS=NATIVE (デフォルト)の場合、Oracleは、Oracleのネイティブ・バージョンの意味および構文上の規則に従います。

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文で宣言した変数のみ、ホスト変数として使用できます。)このオプションの優先順位の詳細は、「オプション値の優先順位」を参照してください。

DEFINE

用途

条件付きプリコンパイル時にソース・コードの一部組込みまたは除外を行うために使用する、ユーザー定義の記号を指定します。詳細は、「条件付きプリコンパイル」を参照してください。

構文

DEFINE=symbol

デフォルト値

なし

使用上の注意

DEFINEをインラインで入力する場合のEXEC ORACLE文の書式は次のとおりです。

EXEC ORACLE DEFINE symbol END-EXEC.

DYNAMIC

用途

このMODEマイクロ・オプションは、動的SQL方法4の記述子の動作を指定します。

構文

DYNAMIC={ORACLE | ANSI}

デフォルト値

ORACLE

使用上の注意

EXEC ORACLE OPTION文を使用してインラインで入力することはできません。

DYNAMICオプションの設定については、「ANSI動的SQLのプリコンパイラ・オプション」を参照してください。

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を戻します。

ERRORS

用途

Pro*COBOLのエラー・メッセージを、端末およびリスト・ファイルの両方に送るか、リスト・ファイルにのみ送るかを指定します。

構文

ERRORS={YES | NO}

デフォルト値

YES

使用上の注意

ERRORS=YESと指定すると、エラー・メッセージは端末とリスト・ファイルの両方に送られます。

ERRORS=NOのときは、エラー・メッセージはリスト・ファイルにのみ送られます。

File_ID

用途

生成されたCOBOLファイルの一意の識別子を示します。生成されたファイルには、「SQLCTX」変数と関連付けられた一意の数値が含まれます。file_idオプションを使用すると、SQLCTX変数の値を設定できます。このオプションは、複数のソース・ファイルをプリコンパイルする際に有効で、ユーザーは生成された異なるファイルと関連付けられた一意のSQLCTX値を確保できます。

構文

FILE_ID=0から65535

デフォルト値

0

使用上の注意

file_idオプションを使用すると、生成されたCOBOLファイルの「SQLCTX」変数に直接値を割り当てることができます。

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ラベルおよびホスト変数の前に付けるオプションのコロン

FORMAT

用途

COBOL文の書式を指定します。

構文

FORMAT={ANSI | TERMINAL | VARIABLE}

デフォルト値

ANSI

使用上の注意

インラインでは入力できません。

入力行の書式はシステムによって異なります。システム固有のOracleのマニュアルまたはCOBOLコンパイラをチェックしてください。

FORMAT=ANSIと指定した場合、入力行の書式はCOBOLに関する現行のANSI規格にできるかぎり準拠しているものと解釈されます。FORMAT=TERMINALと指定した場合、入力行は列1から始まります。このマニュアルのサンプル・コードはTERMINAL書式内にあります。FORMAT=VARIABLEを使用すると、B領域な長さの柔軟性が許可されます。詳細は、「コーディング領域」を参照してください。

HOLD_CURSOR

用途

カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの取扱い方法を指定します。

構文

HOLD_CURSOR={YES | NO}

デフォルト値

NO

使用上の注意

HOLD_CURSORを使用すると、プログラムのパフォーマンスを改善できます。詳細は、付録C「パフォーマンス・チューニング」を参照してください。

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オプションの相互動作に関する詳細は、付録C「パフォーマンス・チューニング」表C-1「HOLD_CURSORおよびRELEASE _CURSORの相互関係」を参照してください。

HOST

用途

使用するホスト言語を指定します。

構文

HOST={COB74 | COBOL}

デフォルト値

COBOL

使用上の注意

インラインでは入力できません。

COB74は、ANSI承認COBOLの1974版を表します。COBOLは、1985版を表します。プラットフォームによっては、これ以外の値も使用できます。

IMPLICIT_SVPT

用途

新しくバッチ処理された挿入を開始する前に、暗黙的なセーブポイントを設定するかどうかを制御します。

構文

implicit_svpt={YES|NO}

デフォルト値

NO

使用上の注意

YESの場合は、新しい行のバッチを開始する前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的な「セーブポイントへのロールバック」が実行されます。このオプションは、DB2との互換性のために用意されていますが、余分なラウンドトリップとなるためマイナス面であることは明らかです。

NOの場合は、暗黙的なセーブポイントが設定されません。バッファ済INSERTでエラーが発生すると、アプリケーションに通知されますが、ロールバックは実行されません。

INAME

用途

入力ファイル名を指定します。

構文

INAME=filename

デフォルト値

なし

使用上の注意

インラインでは入力できません。

プリコンパイル時は、すべての入力ファイル名を一意にする必要があります。

コマンドラインから入力ファイルの名前を指定する場合は、キーワードINAMEは省略できます。たとえば、Pro*COBOLでは、INAME=myprog.pcoと指定するかわりにmyprog.pcoと指定できます。

このように、INAMEの指定でファイル拡張子を使用する必要はありません(ただし、ファイル拡張子が標準以外の場合には拡張子を指定する必要があります)。UNIXプラットフォームでは、Pro*COBOLはデフォルトの入力ファイル拡張子pcoを使用します。

INCLUDE

用途

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

用途

入力ファイルのレコード長を指定します。

構文

IRECLEN=integer

デフォルト値

80

使用上の注意

インラインでは入力できません。

IRECLENには、ORECLENの値より大きい値は指定できません。指定可能な最大値はシステムによって異なります。

LITDELIM

用途

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

用途

リスト・ファイルのデフォルト以外の名前を指定します。

構文

LNAME=filename

デフォルト値

入力します。

使用上の注意

インラインでは入力できません。

デフォルトでは、リスト・ファイルはカレント・ディレクトリに作成されます。

LRECLEN

用途

リスト・ファイルのレコード長を指定します。

構文

LRECLEN=integer

デフォルト値

132

使用上の注意

インラインでは入力できません。

LRECLENの値の範囲は、80から132です。80未満の値を指定した場合は、80がセットされます。この範囲より大きい値を指定すると、エラーが発生します。行番号を挿入できるように、LRECLENの値がIRECLENより8以上大きくなるように指定してください。

LTYPE

用途

リスト・ファイルの型を指定します。

構文

LTYPE={LONG | SHORT | NONE}

デフォルト値

LONG

使用上の注意

インラインでは入力できません。

表14-4 リスト・ファイルの型

リスト・ファイルの型 説明

LTYPE=LONG

リスト・ファイルに入力行が表示されます。

LTYPE=SHORT

リスト・ファイルに入力行は表示されません

LTYPE=NONE

リスト・ファイルが作成されません。


MAX_ROW_INSERT

用途

INSERT文の実行前にバッファする必要がある行の数を制御します。

構文

max_row_insert={0から1000}

デフォルト値

0

使用上の注意

0よりも大きい任意の値を指定すると、バッファ済INSERT機能が有効化され、INSERT文の実行前に多くの行がバッファされます。

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文を無視して、処理を続行します。

MAXOPENCURSORS

用途

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は、大半のプログラムには適切な値です。

MODE

用途

このマクロ・オプションは、プログラムが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バイトの文字変数を宣言する必要があります。詳細は、「エラー処理の代替手段」を参照してください。

NESTED

用途

ネストしたプログラムのGLOBAL句が生成されたかどうかを示します。コンパイラがネストしたプログラムをサポートしている場合は、NESTED値としてYESを使用します。

構文

NESTED={YES | NO}

デフォルト値

YES

使用上の注意

インラインでは入力できません。

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で間接的に定義済のキャラクタ・セットが使用されます。詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』のNLS_LANGの項を参照してください。

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オプションで明示的に指定してください。

ORACA

用途

プログラムがOracle通信領域(ORACA)を使用できるかどうかを指定します。

構文

ORACA={YES | NO}

デフォルト値

NO

使用上の注意

ORACA=YESと指定した場合は、プログラムにINCLUDE ORACA文を記述する必要があります。

ORECLEN

用途

出力ファイルのレコード長を指定します。

構文

ORECLEN=integer

デフォルト値

80

使用上の注意

インラインでは入力できません。

ORECLENに指定する値は、IRECLENの値と同じか、それより大きい値にする必要があります。指定可能な最大値はシステムによって異なります。

OUTLINE

用途

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

用途

アウトライン名の生成を制御します。

構文

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(あるいはその両方)の場合、エラーが生成されます。

PAGELEN

用途

リスト・ファイルの物理ページ当たりの行数を指定します。

構文

PAGELEN=integer

デフォルト値

66

使用上の注意

インラインでは入力できません。指定可能な最大値はシステムによって異なります。

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})を使用して設定できます。

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のデフォルト」を参照してください。

PREFETCH

用途

このオプションを使用して一定の行数をプリフェッチすると、問合せが高速化します。

構文

PREFETCH=integer

デフォルト値

1

使用上の注意

構成ファイルまたはコマンドラインで入力できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。

インラインで使用するときは、明示カーソルを使用し、OPEN文の前に配置する必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。

PREFETCHのデフォルトは1です。プリフェッチをオフにするには、コマンドラインでPREFETCH=0を指定します。

LONG列およびLOB列へのアクセス中もプリフェッチはオフになります。PREFETCHを使用すると、単一行フェッチのパフォーマンスが向上します。配列フェッチを実行する場合、PREFETCHの値は割り当てた値に関係なく無効になります。

アプリケーションにおけるすべてのフェッチを支援できる完全なプリフェッチ番号はありません。

したがって、PREFETCHオプションを使用する場合は、様々な値をテストし、プログラム内の文全般にわたってパフォーマンスを向上させるものを選択してください。特定の文を個別にチューニングする必要がある場合は、EXEC ORACLE OPTIONを使用してPREFETCHオプションをインラインで指定します。この操作は、プログラム内でこのコマンドに続くすべてのフェッチ文に影響を与えます。特定のFETCH文のパフォーマンスが向上するようにプリフェッチ番号を選択してください。この個別プリフェッチ・カウントを実現するには、インラインのプリフェッチ・オプションを指定します。(コマンドラインからではなく。)

最大値は9999です。詳細は、「PREFETCHプリコンパイラ・オプション」を参照してください。

RELEASE_CURSOR

用途

カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの取扱い方法を指定します。

構文

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つのオプションの相互動作に関する詳細は、付録C「パフォーマンス・チューニング」表C-1「HOLD_CURSORおよびRELEASE _CURSORの相互関係」を参照してください。

RUNOUTLINE

用途

プリコンパイラを使用して、または後で開発者が手動で「CREATE OUTLINE」文を実行するオプションを提供します。

構文

runoutline={yes | no}

デフォルト値

無効

使用上の注意

runoutline=yesの場合は、プリコンパイルが正常に完了した後で、プリコンパイラ/トランスレータによって、生成された「CREATE OUTLINE」文が実行されます。

RUNOUTLINEを使用する場合は、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。

SELECT_ERROR

用途

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

用途

構文および意味チェックのタイプとレベルを指定します。

SQLCHECK=SEMANTICSまたはFULLの場合、SQL文は、解析中に一般的な文法を使用してIDLオブジェクトにパッケージ化またはバンドルされます。一般的な文法では、SQL構文は解釈されず、ホスト変数、標識変数および可能なSQL識別子のみが識別されます。意味フェーズ中に、SQLに対して行われると同じ方法で、ホスト変数および標識変数の妥当性がチェックされます。SQLに対して処理されるのと同じ方法で、表名、列名、タイプなどのセマンティクスがチェックされます。

新しく統合されたパーサーには、次の特徴があります。

  1. 既存のすべてのプリコンパイラ・アプリケーションをプリコンパイルします。

  2. 次のSQL文を完全に(SQL文のすべての句を対象に)サポートします。

    1. SELECT文

    2. INSERT文

    3. DELETE文

    4. UPDATE文

    5. 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で行われる検査を示します。構文検査および意味検査の詳細は、付録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

用途

動的SQL文の文のキャッシュ・サイズを示します。

構文

STMT_CACHE = 0から65535

デフォルト値

0

使用上の注意

stmt_cacheオプションを設定すると、アプリケーションでそれぞれの動的SQL文の予測数を保持できます。

TYPE_CODE

用途

このMODEマイクロ・オプションでは、ANSI動的SQL方法4でANSIまたはOracleデータ型コードのどちらを使用するかを決定します。この設定は、MODEオプションの設定と同じです。

構文

TYPE_CODE={ORACLE | ANSI}

デフォルト値

ORACLE

使用上の注意

インラインでは入力できません。

設定できるオプションの詳細は、表10-3を参照してください。

UNSAFE_NULL

用途

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

用途

Oracleユーザー名およびパスワードを指定します。

構文

USERID=username/password[@dbname]

デフォルト値

なし

使用上の注意

インラインでは入力できません。

SQLCHECK=SEMANTICSと指定した場合に、Oracleに接続してデータ・ディクショナリにアクセスすることによりPro*COBOLが必要な情報を得られるようにする場合は、USERIDも指定してください。データベース別名はオプションです。大カッコは、入力しないでください。

VARCHAR

用途

VARCHARオプションは、第5章「埋込みSQL」で説明したCOBOLのグループ項目をVARCHARデータ型として扱うようにPro*COBOLに指示します。

構文

VARCHAR={YES | NO}

デフォルト値

NO

使用上の注意

インラインでは入力できません。

VARCHAR=YESと指定した場合、第5章「埋込みSQL」で説明した暗黙的なグループ項目を、長さフィールドおよび文字列フィールドを持つVARCHAR外部データ型として受け入れます。

VARCHAR=NOと指定した場合、Pro*COBOLは暗黙的なグループ項目をVARCHAR外部データ型として受け入れません。

XREF

用途

リスト・ファイルに相互参照セクションを組み込むかどうかを指定します。

構文

XREF={YES | NO}

デフォルト値

YES

使用上の注意

XREF=YESと指定すると、ホスト変数、カーソル名および文名にクロス・リファレンスが組み込まれます。クロス・リファレンスは、個々のオブジェクトがプログラム内のどこで定義され、どこで参照されているかを示します。

XREF=NOと指定した場合は、相互参照セクションは組み込まれません。