ヘッダーをスキップ
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
11g リリース2(11.2)
B61344-01
  目次
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

6 Oracleプリコンパイラの実行

この章の項目は次のとおりです。

この章では、Oracleプリコンパイラを実行するための要件について詳しく説明します。プリコンパイル中に何が起こるか、プリコンパイラ・コマンドを発行する方法、多くの便利なプリコンパイラ・オプションを指定する方法、条件付きプリコンパイルと分割プリコンパイルの実行方法について学習します。

プリコンパイラのコマンド

Oracleプリコンパイラを実行するには、表6-1に示す言語固有のコマンドの1つを発行します。

表6-1 プリコンパイラの実行コマンド

ホスト言語 プリコンパイラのコマンド

COBOL

procob

FORTRAN

profor


プリコンパイラの場所はシステムごとに異なります。通常、システム管理者またはデータベース管理者は、環境変数、論理名または別名を定義するか、その他のシステム固有の方法を使用して、プリコンパイラ実行ファイルをアクセス可能にします。

INAMEオプションは、プリコンパイル対象のソースファイルを指定します。たとえば、次のPro*COBOLコマンドを入力します。

procob INAME=test

すると、カレント・ディレクトリのtest.pcoファイルがプリコンパイルされますが、これはプリコンパイラではファイル名の拡張子が.pcoとみなされるためです。非標準の拡張子でなければ、INAMEを指定する際にファイル拡張子を使用する必要はありません。

入力および出力ファイル名には、それぞれのオプション名、INAMEおよびONAMEを付ける必要はありません。オプション名を指定しない場合、プリコンパイラではコマンドラインで最初に指定したファイル名を入力ファイル名、2番目のファイル名を出力ファイル名とみなします。

Pro*FORTRANコマンドを次のように入力したとします。

profor MODE=ANSI myfile.pfo DBMS=V7 myfile.f

これは次のコマンドに相当します。

profor MODE=ANSI INAME=myfile.pfo DBMS=V7 ONAME=myfile.f

注意:

特定のオペレーティング・システム・オブジェクト(ファイル名など)の名前を指定しないオプション名とオプション値には、大文字と小文字の区別はありません。このマニュアルの例では、オプション名は大文字で記述し、オプション値は通常小文字で記述しています。プリコンパイラ実行ファイル自体の名前も含め、ファイル名を入力するときには、大文字と小文字の区別は、オペレーティング・システムの表記規則に従ってください。

プリコンパイル中の状況

プリコンパイル中、ホスト・プログラムに埋め込まれたSQL文は、Oracleプリコンパイラが生成するホスト言語コードに置き換えられます。生成されたコードには、各ホスト変数のデータ型、長さおよびアドレスを含むデータ構造体と、Oracleランタイム・ライブラリのSQLLIBで必要なその他の情報が含まれています。このコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。

生成されたコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。プリコンパイラでは、Oracle Call Interface(OCI)ルーチンに対するコールは生成されないので注意してください。

プリコンパイラでは、Oracle Call Interface(OCI)に対するコールは生成されません

プリコンパイラでは、警告およびエラー・メッセージを発行します。これらのメッセージには接頭辞PCC-が付いています。詳細は、『Oracle Databaseエラー・メッセージ』を参照してください。

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

プリコンパイル時には多くの便利なオプションを使用できます。これらを使用すると、リソースの使用方法、エラー・レポートの作成方法、入出力の書式設定方法およびカーソルの管理方法を制御できます。コンパイラ・オプションを指定するには、次の構文を使用します。

<option_name>=<value>

オプションのvalueは文字列リテラルで、テキスト値または数値を表します。たとえば、次のオプションがあるとします。

... INAME=my_test

ここでは、値はファイル名を指定する文字列リテラルです。しかし、次のオプションの場合は違います。

... MAXOPENCURSORS=20

値は数値です。

一部のオプションではブール値を取り、文字列のYESまはたNO、TRUEまたはFALSE、あるいは整数リテラルの1または0で表すことができます。たとえば、次のオプションがあるとします。

... SELECT_ERROR=YES

これは次に相当します。

... SELECT_ERROR=TRUE

または、次に相当します。

... SELECT_ERROR=1

オプション名とオプション値の間には必ず等号を入れ、空白により個々のオプションが区切られるため、等号の前後には空白を入れません。たとえば、コマンドラインで次のようにAUTO_CONNECTオプションを指定するとします。

... AUTO_CONNECT=YES

省略が一義的であるならば、オプション名を省略してもかまいません。たとえば、省略形のMAXは、MAXLITERALまたはMAXOPENCURSORSのいずれの略語とも考えられるので、使用できません。

プリコンパイラのオプションについては、オンラインで便利なリファレンスを利用できます。オンラインの表示を見るには、オペレーティング・システムのプロンプトで、プリコンパイラ・コマンドを引数を指定せずに入力します。リファレンスには、各オプションの名前、構文、デフォルト値および用途が表示されます。アスタリスク(*)の付いたオプションは、インラインでもコマンドラインでも指定できます。

デフォルト値

多くのオプションにはデフォルト値があり、次の値によって決まります。

  • プリコンパイラに組み込まれた値

  • システム構成ファイルで設定された値

  • ユーザー構成ファイルで設定された値

  • インライン指定で設定された値

たとえば、MAXOPENCURSORSオプションでは、キャッシュ内のオープン・カーソルの最大数を指定します。このオプションのプリコンパイラに組み込まれたデフォルト値は10です。ただし、システム構成ファイルでMAXOPENCURSORS=32と指定されていると、デフォルトは32になります。ユーザー構成ファイルでは、これをさらに別の値に設定でき、これはシステム構成ファイルの値より優先されます。

次に、このオプションがコマンドラインで設定された場合、新しいコマンドライン値が優先されます。最終的に、インライン指定が、前述のすべてのデフォルト値よりも優先されます。詳細は、「構成ファイル」を参照してください。

現在の値の確認

コマンドラインで疑問符を使用すると、1つ以上のオプションの現在の値を対話形式で確認できます。たとえば、次のPro*COBOLコマンドを発行するとします。

procob ?

すると、完全なオプション・セットが、現在の値とともに端末に表示されます。この場合、値はプリコンパイラに組み込まれているもので、システム構成ファイルに値があれば、それが優先されます。しかし、次のコマンドを使用した場合は異なります。

procob CONFIG=my_config_file.cfg ?

これでカレント・ディレクトリにmy_config_file.cfgというファイルがあると、my_config_file.cfgファイルのオプションが、その他のデフォルト値とともに表示されます。不足している値はユーザー構成ファイル内の値によって補われ、これらの値はプリコンパイラに組み込まれている値や、システム構成ファイルで指定されている値に優先します。

オプション名を指定し、その後に次の例のように=?を付ければ、1つのオプションの現在の値を確認できます。

procob MAXOPENCURSORS=?

注意:

一部のオペレーティング・システムでは、疑問符(?)の前にバックスラッシュなどのエスケープ文字を付ける必要がある場合があります。たとえば、Pro*COBOLオプションの設定値を表示するには、「procob ?」のかわりに、「procob \?」を使用する必要があります。

大文字と小文字の区別

一般に、コマンドライン・オプションの名前および値には、大文字と小文字のどちらを使用してもかまいません。しかし、UNIXのように大文字と小文字を区別するオペレーティング・システムの場合、プリコンパイラ実行ファイルの名前を含め、ファイル名の値は大文字と小文字の正しい組合せを使用して指定する必要があります。

構成ファイル

構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイルのそれぞれのレコード(行)には、1つのオプションと、それに関連付けられた1つ以上の値が含まれます。たとえば、構成ファイルには次のような行が含まれています。

FIPS=YES
MODE=ANSI

これらにより、FIPSオプションとMODEオプションのデフォルト値が設定されます。

システムにはそれぞれ1つの構成ファイルがあります。システム構成ファイルの名前はプリコンパイラ固有で、表6-2に示すとおりです。

表6-2 システム構成ファイル

プリコンパイラ 構成ファイル

Pro*COBOL

pcccob.cfg

Pro*FORTRAN

pccfor.cfg


ファイルの場所は、オペレーティング・システムによって異なります。ほとんどのUNIXシステムでは、Pro*COBOLの構成ファイルは通常$ORACLE_HOME/procobディレクトリにあり、Pro*FORTRANの構成ファイルは$ORACLE_HOME/proforディレクトリにあります($ORACLE_HOMEはデータベース・ソフトウェアの環境変数です)。

プリコンパイラの各ユーザーは、1つ以上のユーザー構成ファイルを持つことができます。構成ファイルの名前は、CONFIGコマンドライン・オプションを使用して指定します。詳細は、「現在の値の確認」を参照してください。


注意:

構成ファイルはネストできません。CONFIGは、構成ファイル内では有効なオプションではありません。

オプションの入力

どのプリコンパイラ・オプションも、コマンドラインや(CONFIG以外は)構成ファイルから入力できます。多くのオプションはインライン入力もできます。プリコンパイラでは実行時に、これら3つのソースすべてから入力されたオプションを受け入れます。

コマンドライン

プリコンパイラ・オプションをコマンドラインで入力するには、次の構文を使用します。

... [option_name=value] [option_name=value] ...

それぞれのオプションは、1つ以上の空白で区切ります。たとえば、次のようにオプションを入力します。

... ERRORS=no LTYPE=short

インライン

EXEC ORACLE文を記述して、インラインでオプションを入力するには、次の構文を使用します。

EXEC ORACLE OPTION (option_name=value);

たとえば、次の文を記述します。

EXEC ORACLE OPTION (RELEASE_CURSOR=YES);

インラインで入力したオプションは、コマンドラインで入力された同じオプションに優先します。

利点

EXEC ORACLE機能は、プリコンパイル中にオプションを変更するときに特に便利です。たとえば、HOLD_CURSORRELEASE_CURSORの値を文ごとに変更できます。付録Cでは、インライン・オプションを使用して、実行時のパフォーマンスを最適化する方法について説明しています。

インラインでのオプションの指定は、オペレーティング・システムでコマンドラインでの入力文字数が制限されている場合にも便利であり、インライン・オプションは構成ファイルに格納できます(これについては次の項で説明します)。

EXEC ORACLEの有効範囲

EXEC ORACLE文は、同じオプションを指定する別のEXEC ORACLE文によって指定値(テキスト)が変更されるまで有効です。たとえば、HOLD_CURSOR=NOは、HOLD_CURSOR=YES:が指定されるまで有効です。

EXEC SQL BEGIN DECLARE SECTION;
 emp_name CHARACTER(20);
 emp_number INTEGER;
 salary REAL;
 dept_number INTEGER;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL WHENEVER NOT FOUND GOTO no_more;
EXEC ORACLE OPTION (HOLD_CURSOR=NO);
EXEC SQL DECLARE emp_cursor CURSOR FOR
 SELECT EMPNO, DEPTNO FROM EMP;
EXEC SQL OPEN emp_cursor;
display 'Employee Number Dept';
display '--------------- ----';
LOOP
 EXEC SQL FETCH emp_cursor INTO :emp_number, :dept_number; 
 display emp_number, dept_number;
ENDLOOP;
no_more:
 EXEC SQL WHENEVER NOT FOUND CONTINUE; 
 LOOP
 display 'Employee number? ';
 read emp_number;
 IF emp_number = 0 THEN
 exit loop;
 EXEC ORACLE OPTION (HOLD_CURSOR=YES);
 EXEC SQL SELECT ENAME, SAL
 INTO :emp_name, :salary
 FROM EMP
 WHERE EMPNO = :emp_number; 
 display 'Salary for ', emp_name, ' is ', salary;
 ENDLOOP;
...

構成ファイル

Oracleプリコンパイラでは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。デフォルトでは、システム構成ファイルと呼ばれるテキスト・ファイルが使用されます。ただし、コマンドラインでは、ユーザー構成ファイルと呼ばれるいくつかの代替ファイルを指定できます。

利点

構成ファイルにはいくつかの利点があります。システム構成ファイルを使用すると、すべてのプロジェク用にオプション・セットを標準化できます。ユーザー構成ファイルを使用すると、プロジェクトごとにオプションのセットをカスタマイズできます。構成ファイルにより、コマンドラインでオプションの長い文字列を入力する必要がなくなります。また、システムでコマンドラインの長さが制限されている場合、構成ファイルを使用すれば、コマンドラインで入力できるより多くのオプションを指定できます。

構成ファイルの使用方法

構成ファイル内の各レコード(行)には、コマンドライン・オプションが1つ入っています。たとえば、構成ファイルには、FIPSMODEおよびSQLCHECKの各オプションのデフォルト値を設定する次の行が含まれている場合があります。

FIPS=YES
MODE=ANSI
SQLCHECK=SEMANTICS

Oracleプリコンパイラごとに、独自のシステム構成ファイルを設定できます。ファイルの名前や場所は、言語やシステム固有です。ファイルが見つからない場合、警告が表示されますが、プリコンパイラでは処理が続行されます。

1つの言語にはシステム構成ファイルが1つしかありませんが、ユーザー構成ファイルはいくつでも作成できます。特定のユーザー構成ファイルの名前と場所を指定するには、新しいコマンドライン・オプションCONFIGを次のように指定します。

... CONFIG=<filename>

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

オプション値の設定

多くのプリコンパイラのランタイム・オプションには、デフォルト値が組み込まれており、これらは構成ファイルまたはコマンドラインでリセットできます。コマンドラインの設定は、ユーザー構成ファイルの設定に優先し、ユーザー構成ファイルの設定は、システム構成ファイルの設定に優先します。

オプションの有効範囲

プリコンパイル・ユニットは、ホスト言語のコードと1つ以上の埋込みSQL文を含むファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのユニットにのみ効力を持ち、他のユニットには効果がありません。

たとえば、HOLD_CURSOR=YESおよびRELEASE_CURSOR=YESをユニットAには指定し、ユニットBには指定しなかった場合、ユニットAのSQL文はこれらのHOLD_CURSOR値とRELEASE_CURSOR値で実行されますが、ユニットBのSQL文はデフォルト値で実行されます。ただし、Oracleに接続すると有効になるMAXOPENCURSORS設定は、その接続が続くかぎり有効です。

インライン・オプションの有効範囲は、論理的なものではなく、位置的なものです。つまり、インライン・オプションの影響を受けるのは、プログラム・ロジックの流れでオプションの後に来るSQL文ではなく、ソース・ファイル内でそのオプションの後に記述されているSQL文です。オプションの設定は、そのオプションを再指定しないかぎり、ファイルの終わりまで有効です。

クイック・リファレンス

表6-3は、プリコンパイラ・オプションのクイック・リファレンスです。アスタリスクの付いたオプションは、インラインで入力できます。

オンラインでも便利なリファレンスを利用できます。オンライン・リファレンスを表示するには、オペレーティング・システムのプロンプトでオプションを指定せずにプリコンパイラ・コマンドを入力します。画面には、各オプションの名前、構文、デフォルト値および用途が表示されます。

プラットフォーム固有のオプションもいくつかあります。たとえば、MicroFocus COBOLを使用するバイトスワップ・プラットフォームでは、COMP5オプションによって、一部のCOMPUTATIONAL項目の使用が管理されます。使用システム固有のOracleマニュアルを参照してください。

表6-3 プリコンパイラのオプション・クイック・リファレンス

構文 デフォルト値 指定内容

ASACC={YES|NO}

NO

リストのキャリッジ制御

ASSUME_SQLCODE={YES|NO}

NO

プリコンパイラではSQLCODEが宣言されているとみなします。

AUTO_CONNECT={YES|NO}

NO

自動接続

CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF} *

CHARZ

文字配列および文字列のマップ

CHARSET_PICN={NCHAR_CHARSET | DB_CHARSET }

NCHAR_CHARSET

PIC N変数で使用されるキャラクタ・セットの形式

CHARSET_PICX={NCHAR_CHARSET | DB_CHARSET }

DB_CHARSET

PIC X値で使用されるキャラクタ・セットの形式

CINCR

1

接続プールのCINCR値。現在の物理接続数がCMAX値より少ない場合、データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。

CLOSE_ON_COMMIT={YES | NO}

NO

COMMIT時にすべてのカーソルをクローズします。

CMAX

100

データベースに対してオープンできる物理接続の最大数を指定します。

CMIN

2

接続プール内の物理接続の最小数を指定します。

CNOWAIT

0(未設定)

プール内の他のすべての物理接続が使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。接続プールのCNOWAIT値です。

CODE={ANSI_C | KR_C | CPP}

KR_C

生成されるCコードの種類

COMMON_NAME=block_name *


FORTRAN COMMONブロックの名前

COMMON_PARSER

NO

共通のSQL・フロント・エンドを使用して解析します。

COMP5

YES

COMP変数ではなくCOMP-5を生成します。

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

MULTI_BYTE

C/C++コンパイラでサポートされるキャラクタ・セットの種類

CONFIG=filename


ユーザー構成ファイルの名前

CPOOL

NO

接続プールをサポート。このオプションに基づき、プリコンパイラでは、SQLLIBに接続プール機能を有効または無効にするように指示する適切なコードを生成します。

CPP_SUFFIX=extension

なし

デフォルトのC++ファイル名拡張子をオーバーライドします。

CTIMEOUT

0

指定した時間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続を最適な数に保ちます。

DB2_ARRAY={YES |NO}

NO

DB2配列の挿入/選択構文。このオプションに基づき、プリコンパイラでは、追加配列の挿入/選択構文をアクティブ化します。

DBMS={NATIVE|V6|V7}

NATIVE

プリコンパイル時のOracleのバージョン固有の動作

DECLARE_SECTION

NO

YESの場合は、DECLARE SECTIONが必要です。

DEF_SQLCODE={NO | YES}

NO

Pro*C/C++プリコンパイラで#define SQLCODEを生成するかどうかを制御します。

DEFINE=symbol *


条件付きプリコンパイルで使用されるシンボル

DURATION={TRANSACTION | SESSION}

TRANSACTION

キャッシュ内のオブジェクトの確保継続時間を設定します。

DYNAMIC={ANSI | ORACLE}

ORACLE

OracleまたはANSI SQLの意味を指定します。

END_OF_FETCH

1403

フェッチ終了時のSQLCODE値

ERRORS={YES|NO} *

YES

端末にエラーが送信されるかどうかを指定します。

ERRTYPE=filename

なし

intypeファイル・エラー用のリスト・ファイルの名前

EVENTS

NO

パブリッシュ・サブスクライブ・イベント通知をサポートします。

FILE_ID

0

生成されたCOBOLファイル用の一意の数値識別子

FIPS={YES|NO}*

NO

ANSI/ISO拡張機能にフラグを立てるかどうかを指定します。

FORMAT={ANSI|TERMINAL}

ANSI

COBOLまたはFORTRAN入力行の書式

Globalization Support_LOCAL={YES|NO}

YES

SQLLIBにより実行される空白埋込み動作

HEADER=extension

なし

intypeファイル・エラー・メッセージ用のリスト・ファイルの名前

HOLD_CURSOR={YES|NO}*

NO

カーソル・キャッシュでSQL文を処理する方法

HOST={COBOL|COB74}

COBOL

入力ファイルのCOBOLバージョン

IMPLICIT_SVPT

NO

バッファされた挿入の前の暗黙的セーブポイント

[INAME=]filename


入力ファイルの名前

INCLUDE=path*


INCLUDEdファイルのディレクトリ・パス

INTYPE=filename

なし

型情報の入力ファイルの名前

IRECLEN=integer

80

入力ファイルのレコード長

LINES={YES | NO}

NO

#lineディレクティブを生成するかどうか

LITDELIM={APOST|QUOTE} *

QUOTE

COBOL文字列のデリミタ

LNAME=filename


リスト・ファイルの名前

LRECLEN=integer

132

リスト・ファイルのレコード長

LTYPE={LONG|SHORT|NONE}

LONG

リストのタイプ

MAXLITERAL=integer *

プラットフォーム固有

文字列の最大長

MAXOPENCURSORS=integer *

10

キャッシュされるカーソルの最大数

MAX_ROW_INSERT

0

挿入時にバッファされる最大行数

MODE={ORACLE|ANSI|ANSI14|ANSI13}

ORACLE

ANSI/ISO SQL規格への準拠

MULTISUBPROG={YES|NO}

YES

FORTRAN COMMONブロックが生成されるかどうか

NATIVE_TYPES

NO

ネイティブfloat/doubleのサポート

NESTED={YES | NO}

YES

YESの場合は、ネストしたプログラムをサポート

NLS_CHAR=(var1, ..., varn)

なし

マルチバイト文字変数の指定します。

NLS_LOCAL={YES | NO}

NO

YESの場合は、Pro*COBOLの旧リリースのNCHAR方法を使用します。

OBJECTS={YES | NO}

YES

オブジェクト・タイプのサポート

OUTLINE

NO

アウトラインが作成されるカテゴリ

OUTLNPREFIX

なし

アウトライン名の接頭辞

[ONAME=]filename


出力ファイルの名前

ORACA={YES|NO}*

NO

ORACAを使用するかどうか

ORECLEN=integer

80

出力ファイルのレコード長

PAGELEN=integer

66

リストの各ページの行数

PARSE={NONE | PARTIAL | FULL}

FULL

Pro*C/C++で(Cパーサーを使用して).pcソースが解析されるかどうか

PICN_ENDIAN

BIG

PIC Nホスト変数のエンディアン

PICX

CHARF

PIC X COBOL変数のデータ型。

PREFETCH=0..65535

1

一定の行数を事前にフェッチすることで問合せの実行速度を向上させます。

RELEASE_CURSOR={YES|NO} *

NO

カーソル・キャッシュでSQL文を処理する方法

RUNOUTLINE

NO

データベースにアウトラインを作成します。

SELECT_ERROR={YES|NO}*

YES

SELECTエラーの処理の方法

SQLCHECK={FULL|SYNTAX|LIMITED|NONE}*

SYNTAX

構文および意味のチェックの程度

STMT_CACHE

0

文キャッシュのサイズ

SYS_INCLUDE=pathname

なし

iostream.hなどのシステム・ヘッダー・ファイルがあるディレクトリ

THREADS={YES | NO}

NO

共有サーバーアプリケーションを指定します。

TYPE_CODE={ORACLE | ANSI}

ORACLE

動的SQLでのOracleまたはANSI型コードの使用

UNSAFE_NULL={YES|NO}

NO

ORA-01405メッセージを無効にします。

USERID=username/password


有効なOracleユーザー名およびパスワード

UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}

NCHAR_CHARSET

UNICODE(UTF16)で使用されるキャラクタ・セットの形式を指定します。

VARCHAR={YES|NO}

NO

COBOLで暗黙的VARCHARグループ項目を認識します。

VERSION={ANY | LATEST | RECENT} *

RECENT

どのバージョンのオブジェクトを戻すか。

XREF={YES|NO}*

YES

リスト内のクロス・リファレンス・セクション


プリコンパイラ・オプションの使用方法

この項は、プリコンパイラ・オプションを簡単に参照できる構成になっています。プリコンパイラ・オプションをアルファベット順に並べ、オプションごとに用途、構文およびデフォルト値を示しています。さらに、使用上の注意は、オプションの機能を理解する上で役立ちます。使用上の注意に特に記述なければ、そのオプションはコマンドライン、インラインまたは構成ファイルのいずれからでも入力できます。

ASACC

用途

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

構文

ASACC={YES|NO}

デフォルト値

NO

使用上の注意

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

ASSUME_SQLCODE

用途

宣言部で宣言されているかどうか、あるいは型が正しいかどうかに関係なく、SQLCODEが宣言されているとみなすようにOracleプリコンパイラに指示します。ASSUME_SQLCODE=YESと指定すると、リリース1.6以降のOracleプリコンパイラは、この点ではリリース1.5と同様の動作をします。

構文

ASSUME_SQLCODE={YES|NO}

デフォルト値

NO

使用上の注意

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

ASSUME_SQLCODE=NOと指定すると、次の基準のうち少なくとも1つが満たされた場合にかぎり、SQLCODEは状態変数として認識されます。

  • 宣言部で完全に正しいデータ型で宣言されている場合。

  • プリコンパイラで他の状態変数が見つからない場合。

プリコンパイラが宣言部で(完全に正しい型の)SQLSTATE宣言を検出した場合、またはSQLCAのINCLUDEを検出した場合には、SQLCODEが宣言されているとはみなしません

ASSUME_SQLCODE=YESと指定した場合、SQLSTATEおよびSQLCA(Pro*FORTRANのみ)が状態変数として宣言されると、宣言部で宣言されているかどうか、あるいは正しい型かどうかに関係なく、プリコンパイラではSQLCODEが宣言されているものとみなします。このため、リリース1.6.7以降は、この点でリリース1.5と同様の動作をします。

AUTO_CONNECT

用途

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

構文

AUTO_CONNECT={YES|NO}

デフォルト値

NO

使用上の注意

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

AUTO_CONNECT=YESと指定した場合、実行SQL文を検出する同時に、プログラムでは自動的に次のユーザーIDでOracleに接続を試みます。

<prefix><username>

prefixにはOracle初期化パラメータOS_AUTHENT_PREFIXの値(デフォルト値はNULL)を指定し、usernameには使用しているオペレーティング・システムのユーザー名またはタスク名を指定します。この場合、コマンドラインに別の値を指定しても、MAXOPENCURORS (10)のデフォルト値はオーバーライドできません。

AUTO_CONNECT=NO(デフォルト)の場合、Oracleに接続するにはCONNECT文を使用する必要があります。

CHAR_MAP

用途

char型またはchar[n]型のCホスト変数およびそれらに対するポインタのSQLへのデフォルトのマッピングを指定します。

構文

構文

デフォルト値

CHARZ

使用上の注意

旧リリースでは、SQL DECLARE文を使用してCHARなどのcharまたはchar[n]ホスト変数を宣言する必要がありました。外部データ型VARCHAR2およびCHARZが、Oracle7のデフォルト文字マッピングでした。

CINCR

用途

データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。

構文

CINCR = 範囲は1~(CMAX-CMIN)。

デフォルト値

1

使用上の注意

最初は、CMINにより指定されたとおりに物理接続がすべてサーバーに対してオープンされます。それ以降は、必要な場合にのみ物理接続がオープンされます。パフォーマンスを最適にするには、CMINを、アプリケーションによる実行が計画または予想される同時実行文の合計数に設定する必要があります。デフォルト値は2に設定されます。

CLOSE_ON_COMMIT

用途

コミット文でカーソルをクローズするかどうかを指定します。

構文

CLOSE_ON_COMMIT={YES | NO}

デフォルト値

NO

使用上の注意

コマンドラインまたは構成ファイルでのみ使用可能です。

MODEがCLOSE_ON_COMMITよりも高いレベルに指定されている場合は、MODEが優先されます。たとえば、デフォルトはMODE=ORACLEおよびCLOSE_ON_COMMIT=NOです。ユーザーがコマンドラインでMODE=ANSIを指定すると、コミット時にすべてのカーソルがクローズされます。

CLOSE_ON_COMMIT=NO(MODE=ORACLEのとき)の場合、COMMITまたはROLLBACKを発行すると、FOR UPDATE句を使用して宣言されているカーソル、またはCURRENT OF句で参照されるカーソルのみがクローズされます。COMMIT文またはROLLBACK文の影響を受けないその他のカーソルは、すでにオープンされている場合はそのままです。ただし、CLOSE_ON_COMMIT=YES(MODE=ANSIのとき)の場合、COMMITまたはROLLBACKを発行すると、すべてのカーソルがクローズされます。

CMAX

用途

データベースに対してオープンできる物理接続の最大数を指定します。

構文

CINCR = 範囲は1~65535

デフォルト値

100

使用上の注意

CMAX値は、CMIN+CINCR以上に設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、100のデータベース操作を同時に実行できれば十分です。ユーザーは適切な値を設定できます。

CMIN

用途

データベースに対してオープンできる物理接続の最小数を指定します。

構文

CINCR = 範囲は1~(CMAX-CINCR)。

デフォルト値

2

使用上の注意

CMAX値は、CMIN+CINCR以上に設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、100のデータベース操作を同時に実行できれば十分です。ユーザーは適切な値を設定できます。

CNOWAIT

用途

この属性は、プール内の他のすべての物理接続が使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。

構文

CNOWAIT = 範囲は1~65535。

デフォルト値

未設定を意味する0。

使用上の注意

物理接続が使用できず、これ以上物理接続をオープンできない場合、この属性が設定されているとエラーが発生します。そうでない場合、コールは別の接続が取得されるまで待機します。デフォルトでは、CNOWAITは設定されないため、スレッドは、エラーを戻すかわりに、空いている接続を取得できるまで待機します。

CODE

用途

Pro*C/C++プリコンパイラで生成されるC関数プロトタイプの書式を指定します(関数プロトタイプにより、関数およびその引数のデータ型を宣言します)。プリコンパイラでは、SQLライブラリ・ルーチン用の関数プロトタイプが生成され、その結果、Cコンパイラは外部参照を解決できます。CODEオプションを指定すれば、プロトタイプ生成を制御できます。

構文

CODE={ANSI_C | KR_C | CPP}

デフォルト値

KR_C

使用上の注意

コマンドラインでは入力できますが、インラインではできません。

ANSI C規格X3.159-1989は、関数プロトタイプを規定しています。CODE=ANSI_Cのとき、Pro*C/C++では、ANSI C規格に準拠する完全な関数プロトタイプが生成されます。次に例を示します。

extern void sqlora(long *, void *); 

プリコンパイラでは、他のANSI準拠の構造体(const型修飾子など)も生成できます。

CODE=KR_C(デフォルト)のとき、生成された関数プロトタイプの引数リストは、次のようなコメントになります。

extern void sqlora(/*_ long *, void * _*/); 

CコンパイラがX3.159規格に準拠していなければ、CODE=KR_Cを指定します。

CODE=CPPのとき、プリコンパイラではC++互換コードが生成さます。

COMMON_NAME

用途

Pro*FORTRANの場合のみ、COMMON_NAMEオプションは、内部FORTRAN COMMONブロックの命名に使用される接頭辞を指定します。ホスト・プログラムは、COMMONブロックには直接アクセスしません。しかし、このブロックでは、同じプリコンパイル・ユニット内の2つ以上のプログラム・ユニットにSQL文を含めることができます。

構文

COMMON_NAME=blockname

デフォルト値

入力ファイル名の最初の5文字

使用上の注意

Pro*FORTRANプリコンパイラでは、1つの入力ファイル内のすべてのSQL変数用にCOMMONブロックを設定するブロック・データ・サブプログラムという専用プログラム・ファイルを使用します。ブロック・データ・サブプログラムによって、2つのCOMMONブロック(1つはCHARACTER変数用、もう1つはCHARACTER以外の変数用)が定義され、DATA文を使用して変数が初期化されます。

ブロック・データ・サブプログラムの書式は次のとおりです。

BLOCK DATA <subprogram_name>
variable declarations
COMMON statements
DATA statements
END

ホスト・プログラムは、COMMONブロックに直接アクセスしません。しかし、これらでは、同じプリコンパイル・ユニット内の2つ以上のプログラム・ファイルにSQL文を含めることができます。

COMMONブロックの命名に、プリコンパイラでは入力ファイル名と接尾辞C、DおよびIを使用します。ファイル名の最初の多くても5文字までが使用されます。たとえば、入力ファイル名がACCTSPAYの場合、COMMONブロックには、ACCTSCACCTSDおよびACCTSIという名前が付けられます。

しかし、異なる出力ファイルで定義されたCOMMONブロックには、次の図に示すように同じ名前を付けることができます。

ACCTSPAY.PFO ===> ACCTSC, ACCTSD, ACCTSI in ACCTSPAY.FOR
ACCTSREC.PFO ===> ACCTSC, ACCTSD, ACCTSI in ACCTSREC.FOR

ACCTSPAYACCTSRECを1つの実行可能プログラムにリンクさせる場合、リンカーで見えるCOMMONブロックは、6つではなく3つです。

この問題を解決するには、入力ファイル名を変更するか、COMMON_NAMEをインラインまたはコマンドラインで次のように指定することで、デフォルトのCOMMONブロック名をオーバーライドします。

COMMON_NAME=<block_name>

block_nameは、適切なCOMMONブロック名です。たとえば、COMMON_NAME=PAYを指定した場合、COMMONブロックにはPAYCおよびPAYIという名前が付けられます。block_nameの最初の多くても5文字までが使用されます。

たとえば、COMMON_NAME=PAYを指定した場合、COMMONブロックにはPAYCおよびPAYIという名前が付けられます。block_nameの最初の多くても5文字までが使用されます。

COMMON_NAMEをインラインで指定する場合は、そのEXEC ORACLE OPTION文を必ずFORTRAN PROGRAM、SUBROUTINEまたはFUNCTION文の前に置く必要があります。

デフォルトのCOMMONブロック名が、ユーザー定義のCOMMONブロック名と競合する場合、デフォルトの名前はオーバーライドできます。ただし、ユーザー定義のCOMMONブロックの名前を変更することをお薦めします。

MULTISUBPROGを指定する場合、COMMON_NAMEは不要です。

COMMON_PARSER

用途

SELECT、INSERT、DELETE、UPDATE、およびDECLARE CURSOR文のカーソル本体用のSQL99構文をサポートするかどうかを指定します。

構文

COMMON_PARSER={YES | NO}

デフォルト値

NO

使用上の注意

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

COMP_CHARSET

用途

使用するコンパイラでマルチバイト・キャラクタ・セットがサポートされているかどうかを、Pro*C/C++プリコンパイラに指定します。これは、マルチバイトのクライアント環境(たとえば、NLS_LANGがマルチバイト・キャラクタ・セットに設定されているとき)で作業する開発者向けです。

構文

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

デフォルト値

MULTI_BYTE

使用上の注意

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

COMP_CHARSET=MULTI_BYTE(デフォルト)が指定されると、Pro*C/C++では、マルチバイト・キャラクタ・セットをサポートしているコンパイラによりコンパイルされるCコードを生成します。

COMP_CHARSET=SINGLE_BYTEを指定すると、Pro*C/C++では、シングルバイト系のコンパイラ用のCコードが生成され、マルチバイト文字列中のダブルバイト文字の2バイト目がバックスラッシュ(\)に対応するASCII文字である場合に起きる可能性のある面倒な問題に、生成されたCコードにより対処します。この場合、バックスラッシュ(\)は、前にもう1つバックスラッシュを置くことでエスケープされます。


注意:

この機能は、一般的に、古いCコンパイラを使用してシフトJIS環境で開発をするときに必要になります。

シングルバイト・キャラクタ・セットにNLS_LANGが設定されていると、このオプションは効果がありません。

COMP_CHARSET

用途

使用するコンパイラでマルチバイト・キャラクタ・セットがサポートされているかどうかを、Pro*C/C++プリコンパイラに指定します。これは、マルチバイトのクライアント環境(たとえば、NLS_LANGがマルチバイト・キャラクタ・セットに設定されているとき)で作業する開発者向けです。

構文

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

デフォルト

MULTI_BYTE

使用上の注意

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

COMP_CHARSET=MULTI_BYTE(デフォルト)が指定されると、Pro*C/C++では、マルチバイト・キャラクタ・セットをサポートしているコンパイラによりコンパイルされるCコードを生成します。

COMP_CHARSET=SINGLE_BYTEを指定すると、Pro*C/C++では、シングルバイト系のコンパイラ用のCコードが生成され、マルチバイト文字列中のダブルバイト文字の2バイト目がバックスラッシュ(\)に対応するASCII文字である場合に起きる可能性のある面倒な問題に、生成されたCコードにより対処します。この場合、バックスラッシュ(\)は、前にもう1つバックスラッシュを置くことでエスケープされます。


注意:

この機能は、一般的に、古いCコンパイラを使用してシフトJIS環境で開発をするときに必要になります。

シングルバイト・キャラクタ・セットにNLS_LANGが設定されていると、このオプションは効果がありません。

CONFIG

用途

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

構文

CONFIG=filename

デフォルト値

なし

使用上の注意

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

Oracleプリコンパイラでは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。デフォルトでは、システム構成ファイルと呼ばれるテキスト・ファイルが使用されます。ただし、ユーザー構成ファイルと呼ばれるいくつかの代替ファイルを指定できます。

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

CPOOL

用途

このオプションに基づき、プリコンパイラでは、SQLLIBに接続プール機能を有効または無効にするように指示する適切なコードを生成します。

構文

CPOOL = {YES|NO}

デフォルト値

NO

使用上の注意

このオプションがNOに設定されている場合、プリコンパイラではその他の接続プーリング・オプションを無視します。

CPP_SUFFIX

用途

CPP_SUFFIXオプションを使用すると、CODE=CPPオプションを指定した場合に生成されるC++出力ファイルに、プリコンパイラによって付けられるファイル拡張子を指定できます。

構文

CPP_SUFFIX=filename_extension

デフォルト値

システム固有。

使用上の注意

ほとんどのCコンパイラでは、入力ファイルのデフォルト拡張子は.cになります。しかし、C++コンパイラでは、ファイル名の拡張子がコンパイラごとに異なる場合があります。CPP_SUFFIXオプションを指定すると、プリコンパイラで生成されるファイル名拡張子を指定できます。このオプションの値は、引用符もピリオドも付けない文字列です。たとえば、CPP_SUFFIX=ccまたはCPP_SUFFIX=Cのように指定します。

CTIMEOUT

用途

指定した時間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続を最適な数に保ちます。

構文

CTIMEOUT = 範囲は1~65535。

デフォルト値

未設定を意味する0。

使用上の注意

接続プールが終了されるまで、物理接続はクローズされません。新しい物理接続を作成すると、サーバーへのラウンド・トリップが必要になります。

DB2_ARRAY

用途

このオプションに基づき、プリコンパイラでは、追加配列の挿入/選択構文をアクティブ化します。

構文

DB2_ARRAY={YES |NO}

デフォルト値

NO

使用上の注意

このオプションがNOに設定されている場合、Oracleプリコンパイラ構文がサポートされますが、設定されていない場合は、DB2のアレイの挿入/選択構文がサポートされます。

DBMS

用途

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

構文

DBMS={NATIVE|V6|V7}

デフォルト値

NATIVE

使用上の注意

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

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

DBMS=V6またはDBMS=V7の場合、Oracleでは、それぞれOracleバージョン6またはOracleデータベース・バージョン7のルールに従います。DBMS=V6とDBMS=V7の違いの概要は次のとおりです。

  • DBMS=V6の場合、整合性制約(NOT NULL以外)は無効です。一方、DBMS=V7の場合、Oracleデータベース・バージョン7の整合性制約はすべて有効です。

  • DBMS=V6の場合、Oracleでは文字列リテラルが可変長文字値のように扱われます。一方、DBMS=V7の場合、文字列リテラルは固定長文字値のように扱われ、現在のANSI/ISO埋込みSQL規格に準拠するためにCHARの意味が少し変わります。

  • DBMS=V6の場合、PL/SQLブロック内のローカルCHAR変数は可変長文字値のように扱われます。一方、DBMS=V7の場合、CHAR変数はANSI準拠の固定長文字値のように扱われます。

  • DBMS=V6の場合、USERファンクションの戻り値は可変長文字値のように扱われます。一方、DBMS=V7の場合、USERの戻り値はANSI準拠の固定長文字値のように扱われます。

  • DBMS=V6の場合、SQLグループ関数(AVGまたはCOUNTなど)をコールする複数行の問合せを処理すると、ファンクションはOPEN文の実行時ににコールされます。一方、DBMS=V7の場合、ファンクションはFETCH文の実行時にコールされます。OPENingまたはFETCHingを実行すると、ファンクション・コールは失敗します。Oracleではただちにエラー・メッセージが発行されます。したがって、DBMS値のエラー報告に対する影響はわずかです。

  • DBMS=V6の場合、SELECT文またはFETCH文でNULL値が選択されても、エラーは発生せず、出力ホスト変数に関連付けられたインジケータ変数はありません。DBMS=V7の場合、SELECTing文またはFETCHing文でNULLの列または式をインジケータ変数が関係付けられいないホスト変数に入れると、エラー(SQLSTATEは22002、SQLCODEはORA-01405)が発生します。

  • DBMS=V6の場合、SELECT文またはFETCH文で切り捨てられた列値をインジケータ変数のないホスト変数に入れると、エラーORA-01406が発生します。一方、DBMS=V7の場合、エラーは発生しません。

  • DBMS=V6の場合、固定長文字列(動的SQL方法4の)のDESCRIBEの動作は、データ型コード1を戻します。DBMS=V7の場合、DESCRIBEの動作は、データ型コード96を戻します。

  • DBMS=V6の場合、ロールバック・セグメントにPCTINCREASEを使用できます。一方、DBMS=V7の場合、ロールバック・セグメントにPCTINCREASEを使用できません。

  • DBMS=V6の場合、不適切なMAXEXTENTS記憶域パラメータでも使用できます。一方、DBMS=V7の場合は使用できません。

  • DBMS=V6の場合、制約(NOT NULL以外)は無効です。DBMS=V7の場合、Oracleデータベース・バージョン7の制約はすべて有効です。

  • DBMS=V7の場合、SELECT文またはFETCH文で、NULLをインジケータ変数が関連付けられていないホスト変数には入れられません。

DBMS=V6オプションを使用してプリコンパイルを行い、Oracle7データベースに接続する場合、次のようなデータ定義言語(DDL)を指定するとします。

CREATE TABLE T1 (COL1 CHAR(10))

すると、CREATE TABLE文は、次の文を指定したかのように、VARCHAR2(可変長)型を使用して表を作成します。

CREATE TABLE T1 (COL1 VARCHAR2(10))

表6-4は、互換性のあるDBMSMODEの設定がどのように相互に作用するかを示しています。その他の組合せはすべて互換性がなく、推奨できません。

表6-4 互換性のあるDBMSおよびMODE設定

状況 DBMS=V7 MODE=ANSI DBMS=V7 MODE=ORACLE DBMS=V6 MODE=ORACLE

「データが見つかりません」という警告コード

+100

+1403

+1403

インジケータ変数を使用しないNULLのフェッチ

エラー-1405

エラー-1405

エラーなし

インジケータ変数を使用しない切捨て値のフェッチ

エラーなしでSQLWARN(2)設定

エラーなしでSQLWARN(2)設定

エラー-1406とSQLWARN(2)設定されます。

COMMITまたはROLLBACKによるカーソルのクローズ

すべて明示的

CURRENT OFのみ

CURRENT OFのみ(1)

すでにオープンしているカーソルのオープン

エラー-2117

エラーなし

エラーなし

すでにクローズしているカーソルのクローズ

エラー-2114

エラーなし

エラーなし

SQLグループ関数によるNULLの無視

警告なし

警告なし

SQLWARN(3)が設定されています。

複数行の問合せでSQLグループ関数をコールするとき

FETCH時

FETCH時

OPEN時

SQLCA構造体の宣言

オプション

必須

必須(2)

SQLCODEまたはSQLSTATE状態変数の宣言

必須

指定できるがOracleでは無視

指定できるがOracleでは無視(2)

TYPE文およびVAR文でCHARに使用される文字ホスト変数のデフォルト外部データ型

CHARF

VARCHAR2

VARCHAR2

SQL文における文字列リテラルのデフォルトの外部データ型

CHARF

CHARF

VARCHAR2

SQL文におけるCHAR変数のデフォルトの内部データ型

CHAR

CHAR

VARCHAR2

PL/SQLブロックにおけるCHAR変数のデフォルトの外部データ型

CHARF

CHARF

VARCHAR2

USERファンクションから戻される値のデフォルトの外部データ型

CHARF

CHARF

VARCHAR2

DESCRIBEコードから戻される外部データ型(動的SQL方法4)

96

96

1

整合性制約

有効

有効

無効

ロールバック・セグメント用のPCTINCREASE

使用不可

使用不可

使用可能

MAXEXTENTS記憶域パラメータ

使用不可

使用不可

使用可能


DEF_SQLCODE

用途

Pro*C/C++プリコンパイラによりSQLCODEの#defineが生成されるかどうかを制御します。

構文

DEF_SQLCODE={NO | YES}

デフォルト値

NO

使用上の注意

コマンドラインまたは構成ファイルでのみ使用可能です。

DEF_SQLCODE=YESの場合、プリコンパイラでは生成されるソース・コードでSQLCODEが次のように定義されます。

#define SQLCODE sqlca.sqlcode

この定義があれば、SQLCODEを使用して実行SQL文の結果をチェックできます。DEF_SQLCODEオプションは、SQLCODEの使用が必要な規格への準拠のために指定します。

また、次のいずれかを入力して、ソース・コードにSQLCAも組み込む必要があります。

#include <sqlca.h>

または

EXEC SQL INCLUDE SQLCA;

SQLCAを組み込まなければ、このオプションを使用するとプリコンパイル時にエラーが発生します。

DEFINE

用途

条件付きのプリコンパイル時にソース・コードの一部の挿入または除外を行うために使用する、ユーザー定義の記号を指定します。

構文

DEFINE=symbol

デフォルト値

なし

使用上の注意

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

EXEC ORACLE DEFINE <symbol>;

DURATION

用途

後続のEXEC SQL OBJECT CREATE文とEXEC SQL OBJECT DEREF文に使用される確保継続時間を設定します。キャッシュ内のオブジェクトは、保持期間の終わりに暗黙的に解放されます。

構文

DURATION={TRANSACTION | SESSION}

デフォルト値

TRANSACTION

使用上の注意

EXEC ORACLE OPTION文を使用してインライン入力できます。

TRANSACTIONは、オブジェクトがトランザクションの完了時に暗黙的に解放されることを意味します。

SESSIONは、オブジェクトが接続の終了時に暗黙的に解放されることを意味します。

DYNAMIC

用途

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

構文

DYNAMIC={ORACLE | ANSI}

デフォルト値

ORACLE

使用上の注意

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

ERRORS

用途

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

構文

ERRORS={YES|NO}

デフォルト値

YES

使用上の注意

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

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

ERRTYPE

用途

型ファイルの処理中に生成されたエラーを書き込む出力ファイルを指定します。省略すると、エラーは画面に出力されます。

構文

ERRTYPE=filename

デフォルト値

なし

使用上の注意

生成されるエラー・ファイルは1つのみです。複数の値を入力すると、最後の値がプリコンパイラで使用されます。

EVENTS

用途

アプリケーションが通知の登録および受信に対応しているかどうかを指定します。

構文

EVENTS={YES | NO}

デフォルト値

NO

使用上の注意

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

FIPS

用途

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(Pro*COBOLのみ)、NUMBERRAWLONG RAWVARRAWROWIDおよびVARCHARデータ型

  • ランタイム・オプションを指定するためのORACLE OPTION文

  • ユーザー・イグジットでのEXEC IAF文およびEXEC TOOLS文

  • CONNECT

  • TYPEおよびVARデータ型の同値化文

  • 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またはFORTRANで入力する行の書式を指定します。

構文

FORMAT={ANSI|TERMINAL}

デフォルト値

ANSI

使用上の注意

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

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

FORMAT=ANSIの場合、入力行の書式は、できるかぎり現行のANSI規格に準拠します。

Globalization Support_LOCAL

用途

Pro*COBOLの場合のみ、Globalization Support_LOCALオプションにより、グローバリゼーション・サポートの文字変換が、プリコンパイラのランタイム・ライブラリまたはOracleサーバーにより実行されます。

構文

Globalization Support_LOCAL={YES|NO}

デフォルト値

NO

使用上の注意

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

Globalization Support_LOCAL=YESの場合、ランタイム・ライブラリ(SQLLIB)により、マルチバイトのグローバリゼーション・サポート・データ型を持つホスト変数に対する空白の埋込みおよび削除がローカルに実行されます。

Globalization Support_LOCAL=NOの場合、マルチバイトのグローバリゼーション・サポート・データ型を持つホスト変数に対する空白の埋込みおよび削除の処理は、ローカルに実行されません

Oracleでは、グローバリゼーション・サポート変数の空白の埋込みまたは削除は実行されません。Globalization Support_LOCAL=NOの場合、マルチバイトのグローバリゼーション・サポート・データを使用するSQL文を実行すると、Oracleサーバーからはエラーが戻されます。

HEADER

用途

プリコンパイル済ヘッダー・ファイルを許可します。プリコンパイル済ヘッダー・ファイルのファイル拡張子を指定します。

構文

HEADER=extension

デフォルト値

なし

使用上の注意

ヘッダー・ファイルをプリコンパイルする場合、このオプションは必須で、ヘッダー・ファイルのプリコンパイルによって生成される出力ファイルのファイル拡張子の指定に使用されます。

通常のPro*C/C++プログラムをプリコンパイルする場合、このオプションは任意です。指定すると、Pro*C/C++プログラムのプリコンパイル時に、プリコンパイル済ヘッダーのメカニズムを使用できます。

どちらの場合も、このオプションで#includeディレクティブの処理時に使用するファイル拡張子も指定できます。指定した拡張子の付いた#includeファイルが存在する場合、Pro*C/C++ではそのファイルをPro*C/C++によって以前に生成されたプリコンパイル済ヘッダー・ファイルとみなします。#includeディレクティブを処理してインクルードされるヘッダー・ファイルをプリコンパイルするかわりに、そのファイルのデータをインスタンス化します。

このオプションは、コマンドラインまたは構成ファイルでのみ使用できます。インラインでは使用できません。このオプションを使用する場合は、ファイル拡張子のみを指定します。ファイル・セパレータは含めないでください。たとえば、拡張子にピリオド(.)は含めないでください。

HOLD_CURSOR

用途

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

構文

HOLD_CURSOR={YES|NO}

デフォルト値

NO

使用上の注意

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

SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリはOracleプライベートSQL領域にリンクされ、この領域には文の処理に必要な情報が格納されます。HOLD_CURSORは、カーソルとカーソル・キャッシュの間のリンクで発生する処理を制御します。

HOLD_CURSOR=NOの場合、OracleでSQL文が実行され、カーソルがクローズされた後に、プリコンパイラではそのリンクに再利用可能のマークを付けます。このリンクは、それが指すカーソル・キャッシュ・エントリが別のSQL文に必要になるとすぐに再利用されます。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。

HOLD_CURSOR=YESおよびRELEASE_CURSOR=NOの場合、リンクは保持されます。つまり、プリコンパイラではそのリンクが再利用されません。これにより後続の処理の実行速度が向上するため、このオプションは実行頻度の高いSQL文には便利です。文の再解析やOracleプライベートSQL領域用のメモリー割当ては不要です。

暗黙カーソルとともにインラインで使用する場合、SQL文の実行前にHOLD_CURSORを設定してください。明示カーソルとともにインラインで使用する場合は、カーソルをオープンする前にHOLD_CURSORを設定してください。

RELEASE_CURSOR=YESを指定するとHOLD_CURSOR=YESがオーバーライドされ、HOLD_CURSOR=NOを指定するとRELEASE_CURSOR=NOがオーバーライドされます。これら2つのオプションの相互作用の詳細は、表C-1を参照してください。

HOST

用途

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

構文

HOST={COB74|COBOL}

デフォルト値

COBOL

使用上の注意

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

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

IMPLICIT_SVPT

用途

新しいバッチ挿入の開始前に、暗黙的セーブポイントを設定するかどうかを制御します。

構文

implicit_svpt={YES|NO}

デフォルト値

NO

使用上の注意

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

implict_svpt=noの場合、暗黙的セーブポイントは設定されません。バッファ挿入時にエラーが発生すると、アプリケーションに報告されますが、ロールバックは実行されません。

INAME

用途

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

構文

INAME=filename

デフォルト値

なし

使用上の注意

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

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

プリコンパイラでは、標準の入力ファイル拡張子(表6-5を参照)とみなされます。したがって、拡張子が非標準の場合を除き、INAMEの指定にファイル拡張子を使用する必要はありません。たとえば、Pro*FORTRANでは、myprog.pfoのかわりに、myprogと指定できます。

表6-5 入力ファイルの拡張子

ホスト言語 標準のファイル拡張子

COBOL

pco

FORTRAN

pfo


Pro*COBOLの場合のみ、INAMEを指定する際に非標準の入力ファイル拡張子を使用すると、HOSTも指定する必要があります。

INCLUDE

用途

EXEC SQL INCLUDEファイルのディレクトリ・パスを指定します。これは、ディレクトリを使用するオペレーティング・システム専用です。

構文

INCLUDE=path

デフォルト値

現在のディレクトリ

使用上の注意

通常、INCLUDEは、SQLCAファイルおよびORACAファイルのディレクトリ・パスの指定に使用します。プリコンパイラでは、最初に現在のディレクトリを検索し、次にINCLUDEで指定したディレクトリを検索して、最後に標準のINCLUDEファイル用のディレクトリを検索します。このため、SQLCAやORACAなどの標準ファイルのディレクトリ・パスを指定する必要はありません。

しかし、標準以外のファイルについては、現在のディレクトリに格納されている場合を除いて、INCLUDEを使用してディレクトリ・パスを指定する必要があります。コマンドラインでは、次のように複数のパスを指定できます。

... INCLUDE=<path1> INCLUDE=<path2> ...

プリコンパイラでは、最初に現在のディレクトリを検索し、次にpath1で指定したディレクトリを検索し、続いてpath2で指定したディレクトリを検索して、最後に標準のINCLUDEファイル用のディレクトリを検索します。

ディレクトリ・パスを指定しても、プリコンパイラでは最初に現在のディレクトリでファイルを検索します。このため、INCLUDEするファイルが別のディレクトリにある場合は、同じ名前のファイルが現在のディレクトリに存在しないことを確認してください。

ディレクトリ・パスを指定する構文は、システムによって異なります。使用しているオペレーティング・システムの規則に従ってください。

IRECLEN

用途

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

構文

IRECLEN=integer

デフォルト値

80

使用上の注意

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

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

INTYPE

用途

OTTで生成された型のファイルを1つ以上指定します(アプリケーションでオブジェクト型が使用される場合にのみ必要です)。

構文

INTYPE=(file_1,file_2,...,file_n)

デフォルト値

なし

使用上の注意

Pro*C/C++コードには、オブジェクト型ごとに1つの型のファイルが存在します。

LINES

用途

Pro*C/C++プリコンパイラでその出力ファイルに#lineプリプロセッサ・ディレクティブが追加されるかどうかを指定します。

構文

LINES={YES | NO}

デフォルト値

NO

使用上の注意

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

LINESオプションはデバッグに便利です。

LINES=YESの場合、Pro*C/C++プリコンパイラではその出力ファイルに#lineプリプロセッサ・ディレクティブを追加します。

通常、Cコンパイラでは、それぞれの入力行が処理されるたびに行カウントを増やします。#lineディレクティブは、コンパイラの入力行カウントを強制的にリセットして、プリコンパイラで生成されたコードの行を数えないようにします。さらに、入力ファイルの名前が変わったときに、次の#lineディレクティブが新しいファイル名を指定します。

Cコンパイラでは、行番号とファイル名を使用して、エラーの発生場所を示します。したがって、Cコンパイラで発行されるエラー・メッセージは、変更済(プリコンパイル済)のソース・ファイルではなく、常に元のソース・ファイルを参照します。これにより、ほとんどのデバッガを使用して、元のソース・コードを1ステップずつ実行することもできます。

LINES=NO(デフォルト)の場合、プリコンパイラでは出力ファイルに#lineディレクティブは追加されません。


注意:

Pro*C/C++プリコンパイラでは、#lineディレクティブはサポートされません。つまり、プリコンパイラ・ソースでは、#lineディレクティブを直接コーディングできません。ただし、LINES=オプションを使用すると、プリコンパイラに#lineディレクティブを挿入させることができます。

LITDELIM

用途

Pro*COBOL専用のLITDELIMオプションは、文字列定数およびリテラルのデリミタを指定します。

構文

LITDELIM={APOST|QUOTE}

デフォルト値

QUOTE

使用上の注意

LITDELIM=APOSTの場合、プリコンパイラでは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ソース・ファイルで使用されているデリミタに関係なく、プリコンパイラではLITDELIM値で指定したデリミタを生成します。

LNAME

用途

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

構文

LNAME=filename

デフォルト値

input.LIS(inputは入力ファイルの基底名)

使用上の注意

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

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

LRECLEN

用途

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

構文

LRECLEN=integer

デフォルト値

132

使用上の注意

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

LRECLENの値の範囲は80~255です。80未満の値を指定した場合は、かわりに80が使用されます。範囲を超える値を指定すると、かわりに255が使用されます。行番号を挿入できるようにするには、LRECLENの値がIRECLENより8以上大きくなるように指定してください。

LTYPE

用途

リストのタイプを指定します。

構文

LTYPE={LONG|SHORT|NONE}

デフォルト値

LONG

使用上の注意

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

LTYPE=LONGの場合、入力行はリスト・ファイルに表示されます。LTYPE=SHORTの場合、入力行はリスト・ファイルに表示されませんLTYPE=NONEの場合、リストは作成されません。

MAXLITERAL

用途

コンパイラの制限を超えないように、プリコンパイラで生成される文字列リテラルの最大長を指定します。たとえば、コンパイラで132文字より長い文字列リテラルを処理できない場合は、コマンドラインにMAXLITERAL=132と指定します。

構文

MAXLITERAL=integer

デフォルト値

デフォルト値は、次に示すように、プリコンパイラにより異なります。

プリコンパイラ デフォルト値
Pro*COBOL 256
Pro*FORTRAN 1000

使用上の注意

MAXLITERALの最大値は、コンパイラによって異なります。デフォルト値は言語によって異なりますが、このデフォルト値より小さい値を指定する必要がある場合があります。たとえば、一部のCOBOLコンパイラでは、132文字より長い文字列リテラルを処理できないため、その場合はMAXLITERAL=132と指定します。

MAXLITERALで指定した長さを超える文字列は、プリコンパイル中に分割され、実行時に再び結合(連結)されます。

MAXLITERALはインラインで入力できますが、プログラムでその値を設定できるのは1回のみです。そのEXEC ORACLE文は、最初のEXEC SQL文より前に記述する必要があります。これらに違反すると、プリコンパイラでは警告メッセージを発行し、余分なEXEC ORACLE文や、指定位置を間違ったEXEC ORACLE文を無視して、処理を続行します。

MAXOPENCURSORS

用途

同時にオープンされ、プリコンパイラによりキャッシュに保存されたままになるカーソルの数を指定します。

構文

MAXOPENCURSORS=integer

デフォルト値

10

使用上の注意

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

個別にプリコンパイルする場合は、「分割プリコンパイル」の説明のように、MAXOPENCURSORSを指定してください。

MAXOPENCURSORSは、SQLLIBカーソル・キャッシュの初期サイズを指定します。新しいカーソルが必要で、空いているキャッシュ・エントリがない場合、Oracleではエントリの再利用が試みられます。それが成功するどうかは、HOLD_CURSOR値およびRELEASE_CURSOR値によって決まり、明示カーソルの場合は、カーソル自体の状態によって決まります。再利用できるエントリが見つからない場合は、追加のキャッシュ・エントリが割り当てられます。Oracleでは、メモリーが足りなくなるか、OPEN_CURSORSで設定した上限に達するまで、追加キャッシュ・エントリの割当てを続けます。「最大オープン・カーソル数を超えました」というOracleエラーを避けるには、MAXOPENCURSORSにOPEN_CURSORSより6以上小さい値を指定してください。

プログラムで必要な同時オープンのカーソル数が増えるにしたがい、その必要に応じてMAXOPENCURSORSの指定を変更することができます。45~50の値は珍しくはありませんが、カーソルごとに、ユーザー・プロセス・メモリー領域に別のプライベートSQL領域が必要になることを忘れないでください。ほとんどのプログラムでは、デフォルトの10の値で十分です。

MAX_ROW_INSERT

用途

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

構文

max_row_insert={バッファに格納される行数}

デフォルト値

0

使用上の注意

ゼロより大きい数を指定すると、バッファ挿入機能が有効になり、INSERT文が実行される前に、その行数がバッファに格納されます。

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規格に準拠し、次のような変更が有効になります。

  • CHAR列値、USER擬似列値、文字ホスト変数および引用符付きリテラルは、ANSI固定長文字列と同じように扱われます。そして、そのような値について割当て、比較、INSERTUPDATESELECTまたはFETCHを実行するときに、ANSI準拠の空白埋込みが使用されます。

  • COMMITまたはROLLBACKを発行すると、すべての明示カーソルがクローズされます。(MODE={ANSI13|ORACLE}の場合は、コミットまたはロールバックにより、CURRENT OF句で参照されるカーソルのみがクローズされます。)

  • すでにオープンされているカーソルのOPEN や、すでにクローズされているカーソルのCLOSEはできません。(MODE=ORACLEの場合は、再解析を避けるために、オープン状態のカーソルを再度OPENできます。)

  • SQLCODEに戻される「データが見つかりません」というOracle警告コードは、+1403から+100になります。エラー・メッセージのテキストは変わりません。

  • Oracleで切り捨てられた列値が出力ホスト変数に割り当てられても、エラー・メッセージは発行されません。

MODE={ANSI|ANSI14}の場合、SQLCODE(FORTRANのSQLCOD)という4バイトの整数変数、またはSQLSTATE(FORTRANのSQLSTA)という5バイトの文字変数を宣言する必要があります。詳細は、「エラー処理の代替手段」を参照してください。

表6-4では、MODE設定とDBMS設定の相互作用を示しています。その他の組合せは互換性がないか、お薦めできません。

MULTISUBPROG

用途

Pro*FORTRANの場合のみ、MULTISUBPROGオプションは、Pro*FORTRANプリコンパイラでCOMMON文およびBLOCK DATAサブプログラムを生成するかどうかを指定します。


注意:

このオプションを使用すると、Pro*FORTRANリリース1.3アプリケーションをその後のリリースに移行できます。Pro*FORTRANリリース1.3ソース・コードを移行しない場合は、MUTISUBPROGオプションを無視してもかまいません。

構文

MULTISUBPROG={YES|NO}

デフォルト値

YES

使用上の注意

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

MULTISUBPROG=YESの場合、プリコンパイラではCOMMON文およびBLOCK DATAサブプログラムが生成されます。ホスト・プログラムはCOMMONブロックに直接アクセスしませんが、同じプリコンパイル・ユニット内の複数のプログラム・ユニットにSQL文を含めることができます。

ただし、プリコンパイラでは、異なる出力ファイルで定義されているCOMMONブロックに、同じ名前を付けることができます。それらのファイルを実行可能プログラムにリンクさせると、リンク時または実行時にエラーが発生します。この問題を解決するには、入力ファイルの名前を変更するか、COMMON_NAMEオプションを指定してデフォルトのCOMMONブロック名をオーバーライドします。問題を避けるには、MULTISUBPROG=NOを指定してください。

Pro*FORTRANソース・コードの各ソース・ファイルにサブプログラムが1つしかない場合(これはリリース1.3での制限でした)は、MULTISUBPROG=NOを指定します。MULTISUBPROG=NOの場合、COMMON_BLOCKオプションは無視され、プリコンパイラではCOMMON文またはBLOCK DATAサブプログラムは生成されません。実行可能な複数のSQL文を含むプログラム・ユニットにはすべて、宣言部が必要です。それがないと、プリコンパイル・エラーが発生します。複数の埋込みSQLプログラム・ユニットが含まれる入力ファイルの場合、プリコンパイラではそれぞれのユニットで同じ宣言が生成されます。

NATIVE_TYPES

用途

ネイティブfloat/doubleをサポートします。

構文

NATIVE_TYPES = {YES|NO}

デフォルト値

NO

使用上の注意

ネイティブfloatおよびネイティブdoubleデータ型は、単精度と倍精度の浮動小数点値を表します。これらはネイティブ、つまりホスト・システムの浮動小数点形式で表されます。

NLS_CHAR

用途

プリコンパイラでマルチバイト文字変数として扱われるCホスト文字変数を指定します。

構文

NLS_CHAR=varnameまたはNLS_CHAR=(var_1,var_2,...,var_n)

デフォルト値

なし。

使用上の注意

コマンドラインまたは構成ファイルでのみ入力できます。

このオプションを使用すると、プリコンパイラでマルチバイト文字変数として扱う必要のある1つ以上のホスト変数のリストを、プリコンパイル時に指定できます。このオプションでは、C言語のchar変数またはPro*C/C++のVARCHAR変数のみを指定できます。

オプション・リストにプログラムで宣言していない変数を指定しても、プリコンパイラのエラーは発生しません。

NLS_LOCAL

用途

プリコンパイラのSQLLIBランタイム・ライブラリとデータベース・サーバーのうち、どちらでマルチバイト・キャラクタ・セット変換が実行されるかを指定します。

構文

NLS_LOCAL={NO | YES}

デフォルト値

NO

使用上の注意

YESに設定すると、Pro*C/C++およびSQLLIBライブラリによって、ローカル・マルチバイト・サポートが提供されます。どのCホスト変数がマルチバイトかを指定するには、NLS_CHARオプションを使用する必要があります。

NOに設定すると、Pro*C/C++では、データベース・サーバーのマルチバイト・オブジェクトのサポートを使用します。新規アプリケーションにはすべて、NLS_LOCALをNOに設定してください。

環境変数NLS_NCHARには、有効な固定幅の各国語キャラクタ・セットを設定する必要があります。可変長幅の各国語キャラクタ・セットはサポートされていません。

コマンドラインまたは構成ファイルでのみ入力できます。

OBJECTS

用途

オブジェクト型のサポートを要求します。

構文

OBJECTS={YES | NO}

デフォルト値

YES

使用上の注意

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

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

用途

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

構文

PAGELEN=integer

デフォルト値

66

使用上の注意

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

指定可能な最大値はシステムによって異なります。

PARSE

用途

Pro*C/C++プリコンパイラでソース・ファイルを解析する方法を指定します。

構文

PARSE={FULL | PARTIAL | NONE}

デフォルト値

FULL

使用上の注意

C++互換コードを生成するには、PARSEオプションにNONEまたはPARTIALのいずれかを指定する必要があります。

PARSE=NONEまたはPARSE=PARTIALの場合、すべてのホスト変数は宣言部内で宣言する必要があります。

変数SQLCODEも宣言部内で宣言する必要があります。宣言しない場合、エラー検出の信頼性がなくなります。使用しているプラットフォームのPARSEのデフォルト値を確認してください。

PARSE=FULLの場合、Cパーサーが動作し、コード内のクラスなどのC++構造体は認識されません。

PARSE=FULLまたはPARSE=PARTIALを指定すると、Pro*C/C++は#define#ifdefなどのCプリプロセッサ・ディレクティブを完全にサポートします。ただし、PARSE=NONEを指定すると、EXEC ORACLE文により条件付きプリプロセッシングがサポートされます。


注意:

一部のプラットフォームでは、PARSEのデフォルト値がFULL以外の値です。使用するシステム固有のマニュアルを参照してください。

PREFETCH

用途

数行を事前にフェッチすることで、問合せの実行速度を向上させます。

構文

PREFETCH=integer

デフォルト値

1

使用上の注意

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

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

指定可能な値の範囲は0~65535です。

RELEASE_CURSOR

用途

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

構文

RELEASE_CURSOR={YES|NO}

デフォルト値

NO

使用上の注意

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

SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリは、文の処理に必要な情報が格納されryOracleプライベートSQL領域にリンクされます。RELEASE_CURSORは、カーソルとカーソル・キャッシュの間のリンクで発生する処理を制御します。

RELEASE_CURSOR=YESの場合、OracleでSQL文が実行され、カーソルがクローズされると、プリコンパイラはただちにこのリンクを削除します。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。カーソルのCLOSE時に、関連付けられたリソースが確実に解放されるようにするには、RELEASE_CURSOR=YESを指定する必要があります。

RELEASE_CURSOR=NOおよびHOLD_CURSOR=YESの場合、リンクは保持されます。オープン・カーソルの数がMAXOPENCURSORSの設定値を超えないかぎり、プリコンパイラではリンクは再利用されません。これにより後続の処理の実行速度が向上するため、実行頻度の高いSQL文には便利です。文の再解析やOracleプライベートSQL領域用のメモリー割当ては不要です。

暗黙カーソルとともにインラインで使用する場合、SQL文の実行前にRELEASE_CURSORを設定してください。明示カーソルとともにインラインで使用する場合は、カーソルをオープンする前にRELEASE_CURSORを設定してください。

RELEASE_CURSOR=YESを指定するとHOLD_CURSOR=YESがオーバーライドされ、HOLD_CURSOR=NOを指定するとRELEASE_CURSOR=NOがオーバーライドされます。これら2つのオプションの相互作用の詳細は、付録Cを参照してください。

RUNOUTLINE

用途

プリコンパイラを使用するか、後から手動で行うかのいずれかにより、アウトライン作成の文を実行するオプションを開発者に提供します。

構文

runoutline={yes | no}

デフォルト値

なし

使用上の注意

runoutline=yesの場合、生成されたアウトライン作成文が、正常なプリコンパイルの最後に、プリコンパイラまたはトランスレータによって実行されます。

runoutlineの使用時には、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションをオンにした場合、セマンティック・チェックは完全に行われます(sqlcheck=full/semantics)。sqlcheck=syntax/limited/noneの場合、エラーが生成されます。

SELECT_ERROR

用途

1行のSELECT文が複数行を戻すとき、あるいはホスト配列の許容範囲を超える行数を戻すときに、プログラムでエラーが発生するかどうかを指定します。

構文

SELECT_ERROR={YES|NO}

デフォルト値

YES

使用上の注意

SELECT_ERROR=YESの場合、1行のSELECT文で戻される行数が多すぎたり、配列のSELECT文でホスト配列に入りきらない行数が戻されたりすると、エラーが発生します。

SELECT_ERROR=NOの場合、1行のSELECT文で戻される行数が多すぎても、配列のSELECT文でホスト配列に入りきらない行数が戻されても、エラーは発生しません。

YESを指定してもNOを指定しても、行は表から無作為に選択されます。特定の順序で行を選択するには、SELECT文でORDER BY句を使用してください。SELECT_ERROR=NOを指定して、ORDER BYを使用すると、Oracleでは最初の行を戻します。配列に入れる行の選択の場合は、最初のn行を戻します。SELECT_ERROR=YESを指定した場合、ORDER BYを使用してもしなくても、戻される行が多すぎるとエラーが発生します。

SQLCHECK

用途

構文およびセマンティック・チェックの種類と範囲を指定します。

構文

SQLCHECK={SEMANTICS|FULL|SYNTAX|LIMITED|NONE}

デフォルト値

SYNTAX

使用上の注意

SEMANTICS値とFULL値は等価です。同様に、SYNTAX値とLIMITED値も等価です。

Oracleプリコンパイラは、埋込みSQL文とPL/SQLブロックの構文およびセマンティックをチェックすることで、プログラムのデバッグに役立ちます。検出されたエラーは、コンパイル時に報告されます。

チェックのレベルは、インラインまたはコマンドラインでSQLCHECKオプションを入力することで制御します。ただし、インラインで指定するチェックのレベルは、コマンドラインで指定する(またはデフォルトで受け入れる)レベルより高くできません。たとえば、コマンドラインでSQLCHECK=NONEを指定すると、インラインでSQLCHECK=SYNTAXを指定することはできません。

SQLCHECK=SYNTAX|SEMANTICSの場合、PL/SQLの予約語がSQL文で使用されると、そのSQL文がPL/SQLでなくても、プリコンパイラではエラーが発生します。PL/SQLの予約語を識別子として使用する必要がある場合は、二重引用符で囲んでください。

SQLCHECK=SEMANTICSを指定した場合、次のものを対象とした構文およびセマンティックのチェックが行われます。

  • INSERTUPDATEなどのデータ操作文

  • PL/SQLブロック

ただし、リモートのデータ操作文(AT db_name句を使用する文)については、構文チェックのみが行われます。

プリコンパイラでは、セマンティック・チェックに必要な情報を、埋め込まれたDECLARE TABLE文から取得します。USERIDオプションが指定されている場合は、Oracleに接続し、データ・ディクショナリにアクセスして取得します。データ操作文またはPL/SQLブロックで参照される表がすべてDECLARE TABLE文で定義されていれば、Oracleに接続する必要はありません。

Oracleに接続してもデータ・ディクショナリで見つからない情報がある場合は、DECLARE TABLE文を使用して、欠けている情報を提供する必要があります。プリコンパイル時には、DECLARE TABLE文の定義とデータ・ディクショナリの定義が矛盾する場合、前者が優先されます。

新しいプログラムをプリコンパイルするときには、SQLCHECK=SEMANTICSを指定してください。ホスト・プログラムにPL/SQLブロックを埋め込む場合は、SQLCHECK=SEMANTICSUSERIDオプションを指定する必要があります

SQLCHECK=SYNTAXの場合、プリコンパイラでは次のものの構文チェックを行います。

  • データ操作文

  • PL/SQLブロック

セマンティック・チェックは行われません。DECLARE TABLE文は無視され、PL/SQLブロックは使用できません。データ操作文のチェックには、下位互換性のあるOracleデータベース・バージョン7構文規則が使用されます。プリコンパイル済のプログラムを移行する場合は、SQLCHECK=SYNTAXを指定してください。

SQLCHECK=NONEの場合、構文チェックもセマンティック・チェックも行われません。DECLARE TABLE文は無視され、PL/SQLブロックは使用できません。プログラムが次のような場合は、SQLCHECK=NONEを指定してください。

  • Oracle以外のSQLが含まれる場合(たとえば、Oracle以外のサーバーにオープン・ゲートウェイを介して接続するため)

  • まだ作成されておらず、それらのためのDECLARE TABLE文がない表を参照する場合

表6-6に、SQLCHECKによって行われるチェックについてまとめらてれいます。構文チェックおよびセマンティック・チェックの詳細は、付録Dを参照してください。

表6-6 SQLCHECKによるチェック


SQLCHECK=SEMANTIC SQLCHECK=SYNTAX SQLCHECK=NONE

構文

セマンティック

構文

セマンティック

構文

セマンティック

DML




リモートDML





PL/SQL






STMT_CACHE

用途

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

構文

STMT_CACHE = 範囲は0~65535

デフォルト値

0

使用上の注意

stmt_cacheオプションは、アプリケーションで予想される数の個別の動的SQL文を保持するために設定されます。

THREADS

用途

THREADS=YESの場合、プリコンパイラではコンテキスト宣言を検索します。

構文

THREADS={YES | NO}

デフォルト値

NO

使用上の注意

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

マルチスレッド・サポートを必要とするプログラムには、すべてこのオプションを指定する必要があります。

THREADS=YESの場合、最初のコンテキストが現れ、実効SQL文が見つかる前にEXEC SQL CONTEXT USEディレクティブが検出されないと、プリコンパイラではエラーが発生します。

TYPE_CODE

用途

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

構文

TYPE_CODE={ORACLE | ANSI}

デフォルト値

ORACLE

使用上の注意

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

UNSAFE_NULL

用途

UNSAFE_NULL=YESを指定すると、インジケータ変数を使用せずにNULLをフェッチしても、ORA-01405メッセージは生成されません。

構文

UNSAFE_NULL={YES|NO}

デフォルト値

NO

使用上の注意

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

MODE=ORACLEおよびDBMS=V7の場合のみ、UNSAFE_NULL=YESを指定できます。

埋込みPL/SQLブロックのホスト変数では、UNSAFE_NULLオプションには何の効果もありません。ORA-01405エラーを避けるには、インジケータ変数を使用する必要があります

USERID

用途

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

構文

USERID=username/password

デフォルト値

None

使用上の注意

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

先頭にOracle初期化パラメータOS_AUTHENT_PREFIXの付いたOracleユーザー名しか受け入れない自動接続機能を使用している場合は、このオプションを使用しないでください。

SQLCHECK=SEMANTICSの場合、Oracleに接続し、データ・ディクショナリにアクセスして、プリコンパイルに必要な情報を取得させるには、USERIDも指定する必要があります。

UTF16_CHARSET

用途

UNICODE(UTF16)変数で使用されるキャラクタ・セットの形式を指定します。

構文

UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}

デフォルト値

NCHAR_CHARSET

使用上の注意

コマンドラインまたは構成ファイルでのみ使用でき、インラインでは使用できません。

UTF16_CHARSET=NCHAR_CHARSET(デフォルト)の場合、UNICODE(UTF16)のバインドまたは定義バッファは、サーバー側の各国語キャラクタ・セットに従って変換されます。ターゲット列がCHARの場合は、パフォーマンスが低下することがあります。

UTF16_CHAR=DB_CHARSETの場合、UNICODE(UTF16)バインドまたは定義バッファは、データベースのキャラクタ・セットに従って変換されます。


注意:

ターゲット列がNCHARの場合、データが失われることがあります。


VARCHAR

用途

Pro*COBOLの場合のみ、VARCHARオプションは、『Pro*COBOLプログラマーズ・ガイド』の第1章で説明されているCOBOLグループ項目をVARCHARデータ型として扱うようにプリコンパイラに指示します。

構文

VARCHAR={YES|NO}

デフォルト値

NO

使用上の注意

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

VARCHAR=YESの場合、『Pro*COBOLプログラマーズ・ガイド』の第1章で説明されている暗黙的なグループ項目は、長さフィールドおよび文字列フィールドを持つOracle VARCHAR外部データ型として受け入れられます。

VARCHAR=NOの場合、Pro*COBOLプリコンパイラでは、暗黙的なグループ項目はVARCHAR外部データ型としては受け入れられません。

VERSION

用途

EXEC SQL OBJECT DEREF文によって戻されるオブジェクトのバージョンを指定します。

構文

VERSION={RECENT | LATEST | ANY}

デフォルト値

RECENT

使用上の注意

EXEC ORACLE OPTION文を使用してインラインで入力できます。

RECENTは、現行のトランザクションでオブジェクトが選択されてオブジェクト・キャッシュに入っている場合、そのオブジェクトが戻されることを意味します。シリアライズ可能モードで実行中のトランザクションの場合、このオプションの効果はLATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。ほとんどのアプリケーションには、RECENTが適切です。

LATESTは、オブジェクトがオブジェクト・キャッシュに存在しない場合、データベースから取得されることを意味します。オブジェクト・キャッシュに存在する場合は、サーバーからリフレッシュされます。LATESTを使用する場合、ネットワークのラウンドトリップ数が最大になるため注意してください。LATESTは、オブジェクト・キャッシュとサーバーのバッファ・キャッシュをできるかぎり一致させる必要がある場合にのみ使用してください。

ANYは、オブジェクトがすでにオブジェクト・キャッシュに存在している場合、そのオブジェクトが戻されることを意味します。キャッシュになければ、そのオブジェクトはサーバーから取得します。ANYを指定すると、ネットワークのラウンドトリップ数は最小になります。この値は、読取り専用オブジェクトにアクセスするアプリケーションや、ユーザーがオブジェクトに排他的にアクセスする場合に使用してください。

XREF

用途

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

構文

XREF={YES|NO}

デフォルト値

YES

使用上の注意

XREF=YESの場合、ホスト変数、カーソル名および文名に相互参照が組み込まれます。相互参照は、各オブジェクトがプログラム内のどこで定義され参照されるかを示します。

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

条件付きプリコンパイル

条件付きプリコンパイルでは、特定の条件に基づいて、ホスト・プログラム内のコード・セクションの組込み(または除外)を行います。たとえば、UNIXでのプリコンパイル時には、あるコード・セクションを組み込み、VMSでのプリコンパイル時には、別のセクションを組み込むことが必要な場合があります。条件付きプリコンパイルを使用すると、異なる環境で実行可能なプログラムを作成できます。

コードの条件付きセクションは、環境と実行するアクションを定義する文で示されます。これらのセクションには、ホスト言語の文とEXEC SQL文を記述できます。次の文により、プリコンパイルを条件付きで制御できます。

EXEC ORACLE DEFINE symbol; -- define a symbol
EXEC ORACLE IFDEF symbol; -- if symbol is defined
EXEC ORACLE IFNDEF symbol; -- if symbol is not defined
EXEC ORACLE ELSE; -- otherwise
EXEC ORACLE ENDIF; -- end this control block

すべてのEXEC ORACLE文の終わりには、ホスト言語の文終了文字を付ける必要があります。たとえば、Pro*COBOLの場合、条件付き文の終わりにはEND-EXECを付ける必要があります。Pro*FORTRANの場合は、改行マークを付ける必要があります。

次の例では、シンボルsite2が定義されている場合のみ、SELECT文がプリコンパイルされます。

EXEC ORACLE IFDEF site2;
 EXEC SQL SELECT DNAME
 INTO :dept_name
 FROM DEPT
 WHERE DEPTNO = :dept_number;
EXEC ORACLE ENDIF;

次の例に示すように、条件のブロックはネストできます。

EXEC ORACLE IFDEF outer;
 EXEC ORACLE IFDEF inner;
 ...
 EXEC ORACLE ENDIF;
EXEC ORACLE ENDIF;

ホスト言語または埋込みSQLコードをIFDEFとENDIFの間に記述し、シンボルを定義しないことで、そのコードをコメント行にすることができます。

シンボルの定義

シンボルを定義するには2通りの方法があります。1つは、次の文をホスト・プログラムに組み込む方法です。

EXEC ORACLE DEFINE symbol;

もう1つは、次の構文を使用してコマンドラインでシンボルを定義する方法です。

... INAME=filename ... DEFINE=symbol

symbolの部分は大文字と小文字の区別がありません。

Oracleプリコンパイラをシステムにインストールした時点で、ポート固有のいくつかのシンボルが事前に定義されます。たとえば、事前に定義されたオペレーティング・システムのシンボルには、CMS、MVS、MS-DOS、UNIXおよびVMSがあります。

分割プリコンパイル

Oracleプリコンパイルを使用すると、複数のホスト・プログラム・モジュールを別々にプリコンパイルし、それらをリンクして1つの実行可能プログラムを作成できます。これにより、1つのプログラムの機能コンポーネントを別々のプログラムに記述してデバッグする場合に必要な、モジュール方式のプログラミングがサポートされます。個々のプログラム・モジュールを同じ言語で記述する必要はありません。

ガイドライン

次のガイドラインは、いくつかの一般的な問題を回避するのに役立ちます。

カーソルの参照

カーソル名はSQL識別子であり、その有効範囲はプリコンパイル・ユニットです。このため、カーソルの動作が複数のプリコンパイル・ユニット(ファイル)にまたがることはありません。つまり、あるファイルで宣言したカーソルを、別のファイルからオープンまたはフェッチできません。したがって、分割プリコンパイルを実行するときは、指定のカーソルに対する定義と参照がすべて1つのファイルに記述されているか確認してください。

MAXOPENCURSORSの指定

Oracleに接続するプログラム・モジュールをプリコンパイルするときは、MAXOPENCURSORSに、どのプログラム・モジュールにとっても十分な大きさの値を指定してください。MAXOPENCURSORSの値は、別のプログラム・モジュールに使用すると無視されます。実行時には、接続に有効な値のみが使用されます。

1つのSQLCAの使用

使用するSQLCAが1つのみの場合は、1つのプログラム・モジュールでそのSQLCAをグローバルに宣言する必要があります。

制限事項

1つの明示カーソルの参照はすべて、同じプログラム・ファイル内にあることが必要です。別のモジュールでDECLAREされたカーソルの操作はできません。カーソルの詳細は、「埋込みSQLの使用方法」を参照してください。

また、SQL文が含まれるプログラム・ファイルにはすべて、ローカルSQL文の有効範囲内にあるSQLCAが1つ必要です。

コンパイルおよびリンク

実行可能プログラムを作成するには、プリコンパイラによって生成されたソース・ファイルをコンパイルし、その結果得られるオブジェクト・モジュールを、SQLLIBおよびシステム固有のOracleライブラリ内の必要なモジュールとリンクさせる必要があります。また、OCIコールを埋め込む場合も、必ずOCIランタイム・ライブラリ(OCILIB)にリンクしてください。

リンカーは、オブジェクト・モジュール内のシンボリック参照を解決します。これらの参照で競合が発生すると、リンクは失敗します。プリコンパイル済のプログラムにサード・パーティのソフトウェアをリンクしようとするときに、このような競合が発生する可能性があります。サード・パーティのソフトウェアにはOracleと互換性のないものもあるため、問題が生じます。Oracleカスタマ・サービスに問い合せて、使用するソフトウェアがサポートされているかどうかを確認してください。

コンパイルおよびリンクの方法はシステムによって異なります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。

システム依存

コンパイルおよびリンクの方法は、システムによって異なります。たとえば、一部のシステムでは、ホスト言語のプログラムのコンパイル時に、コンパイラの最適化をオフにする必要があります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。

マルチバイト・グローバリゼーション・サポートの互換性

マルチバイトのグローバリゼーション・サポート機能を使用する場合、オブジェクト・ファイルをSQLLIBランタイム・ライブラリの現行バージョンにリンクさせる必要があります。このリリースのマルチバイト・グローバリゼーション・サポート機能は、SQLLIBランタイム・ライブラリではサポートされていますが、Oracleサーバーではサポートされていません。この結果生まれたアプリケーションは、Oracleデータベースのどのリリースでも実行できます。