この章の項目は次のとおりです。
この章では、Oracleプリコンパイラを実行するための要件について詳しく説明します。プリコンパイル中に何が起こるか、プリコンパイラ・コマンドを発行する方法、多くの便利なプリコンパイラ・オプションを指定する方法、条件付きプリコンパイルと分割プリコンパイルの実行方法について学習します。
Oracleプリコンパイラを実行するには、表6-1に示す言語固有のコマンドの1つを発行します。
プリコンパイラの場所はシステムごとに異なります。通常、システム管理者またはデータベース管理者は、環境変数、論理名または別名を定義するか、その他のシステム固有の方法を使用して、プリコンパイラ実行ファイルをアクセス可能にします。
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に示すとおりです。
ファイルの場所は、オペレーティング・システムによって異なります。ほとんどの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_CURSOR
とRELEASE_CURSOR
の値を文ごとに変更できます。付録Cでは、インライン・オプションを使用して、実行時のパフォーマンスを最適化する方法について説明しています。
インラインでのオプションの指定は、オペレーティング・システムでコマンドラインでの入力文字数が制限されている場合にも便利であり、インライン・オプションは構成ファイルに格納できます(これについては次の項で説明します)。
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つ入っています。たとえば、構成ファイルには、FIPS
、MODE
および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 |
リスト内のクロス・リファレンス・セクション |
この項は、プリコンパイラ・オプションを簡単に参照できる構成になっています。プリコンパイラ・オプションをアルファベット順に並べ、オプションごとに用途、構文およびデフォルト値を示しています。さらに、使用上の注意は、オプションの機能を理解する上で役立ちます。使用上の注意に特に記述なければ、そのオプションはコマンドライン、インラインまたは構成ファイルのいずれからでも入力できます。
リスト・ファイルが、キャリッジ制御のために各行の最初の列を使用するASA規則に従うかどうかを指定します。
構文
ASACC={YES|NO
}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
宣言部で宣言されているかどうか、あるいは型が正しいかどうかに関係なく、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={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型またはchar[n]型のCホスト変数およびそれらに対するポインタのSQLへのデフォルトのマッピングを指定します。
構文
構文
デフォルト値
CHARZ
使用上の注意
旧リリースでは、SQL DECLARE文を使用してCHARなどのcharまたはchar[n]ホスト変数を宣言する必要がありました。外部データ型VARCHAR2およびCHARZが、Oracle7のデフォルト文字マッピングでした。
データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。
構文
CINCR = 範囲は1~(CMAX-CMIN)。
デフォルト値
1
使用上の注意
最初は、CMINにより指定されたとおりに物理接続がすべてサーバーに対してオープンされます。それ以降は、必要な場合にのみ物理接続がオープンされます。パフォーマンスを最適にするには、CMINを、アプリケーションによる実行が計画または予想される同時実行文の合計数に設定する必要があります。デフォルト値は2に設定されます。
用途
コミット文でカーソルをクローズするかどうかを指定します。
構文
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を発行すると、すべてのカーソルがクローズされます。
データベースに対してオープンできる物理接続の最大数を指定します。
構文
CINCR = 範囲は1~65535
デフォルト値
100
使用上の注意
CMAX値は、CMIN+CINCR以上に設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、100のデータベース操作を同時に実行できれば十分です。ユーザーは適切な値を設定できます。
データベースに対してオープンできる物理接続の最小数を指定します。
構文
CINCR = 範囲は1~(CMAX-CINCR)。
デフォルト値
2
使用上の注意
CMAX値は、CMIN+CINCR以上に設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、100のデータベース操作を同時に実行できれば十分です。ユーザーは適切な値を設定できます。
この属性は、プール内の他のすべての物理接続が使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。
構文
CNOWAIT = 範囲は1~65535。
デフォルト値
未設定を意味する0。
使用上の注意
物理接続が使用できず、これ以上物理接続をオープンできない場合、この属性が設定されているとエラーが発生します。そうでない場合、コールは別の接続が取得されるまで待機します。デフォルトでは、CNOWAITは設定されないため、スレッドは、エラーを戻すかわりに、空いている接続を取得できるまで待機します。
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++互換コードが生成さます。
用途
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
ブロックには、ACCTSC
、ACCTSD
およびACCTSI
という名前が付けられます。
しかし、異なる出力ファイルで定義されたCOMMON
ブロックには、次の図に示すように同じ名前を付けることができます。
ACCTSPAY.PFO ===> ACCTSC, ACCTSD, ACCTSI in ACCTSPAY.FOR ACCTSREC.PFO ===> ACCTSC, ACCTSD, ACCTSI in ACCTSREC.FOR
ACCTSPAY
とACCTSREC
を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
は不要です。
SELECT、INSERT、DELETE、UPDATE、およびDECLARE CURSOR文のカーソル本体用のSQL99構文をサポートするかどうかを指定します。
構文
COMMON_PARSER={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインで入力できます。
使用するコンパイラでマルチバイト・キャラクタ・セットがサポートされているかどうかを、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が設定されていると、このオプションは効果がありません。
使用するコンパイラでマルチバイト・キャラクタ・セットがサポートされているかどうかを、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=
filename
デフォルト値
なし
使用上の注意
コマンドラインからのみ入力できます。
Oracleプリコンパイラでは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。デフォルトでは、システム構成ファイルと呼ばれるテキスト・ファイルが使用されます。ただし、ユーザー構成ファイルと呼ばれるいくつかの代替ファイルを指定できます。
構成ファイルはネストできません。したがて、構成ファイルではCONFIG
オプションを指定できません。
このオプションに基づき、プリコンパイラでは、SQLLIBに接続プール機能を有効または無効にするように指示する適切なコードを生成します。
構文
CPOOL = {YES|NO}
デフォルト値
NO
使用上の注意
このオプションがNOに設定されている場合、プリコンパイラではその他の接続プーリング・オプションを無視します。
CPP_SUFFIXオプションを使用すると、CODE=CPPオプションを指定した場合に生成されるC++出力ファイルに、プリコンパイラによって付けられるファイル拡張子を指定できます。
構文
CPP_SUFFIX=filename_extension
デフォルト値
システム固有。
使用上の注意
ほとんどのCコンパイラでは、入力ファイルのデフォルト拡張子は.cになります。しかし、C++コンパイラでは、ファイル名の拡張子がコンパイラごとに異なる場合があります。CPP_SUFFIXオプションを指定すると、プリコンパイラで生成されるファイル名拡張子を指定できます。このオプションの値は、引用符もピリオドも付けない文字列です。たとえば、CPP_SUFFIX=ccまたはCPP_SUFFIX=Cのように指定します。
指定した時間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続を最適な数に保ちます。
構文
CTIMEOUT = 範囲は1~65535。
デフォルト値
未設定を意味する0。
使用上の注意
接続プールが終了されるまで、物理接続はクローズされません。新しい物理接続を作成すると、サーバーへのラウンド・トリップが必要になります。
このオプションに基づき、プリコンパイラでは、追加配列の挿入/選択構文をアクティブ化します。
構文
デフォルト値
NO
使用上の注意
このオプションがNOに設定されている場合、Oracleプリコンパイラ構文がサポートされますが、設定されていない場合は、DB2のアレイの挿入/選択構文がサポートされます。
用途
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は、互換性のあるDBMS
とMODE
の設定がどのように相互に作用するかを示しています。その他の組合せはすべて互換性がなく、推奨できません。
表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記憶域パラメータ |
使用不可 |
使用不可 |
使用可能 |
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=
symbol
デフォルト値
なし
使用上の注意
DEFINE
をインラインで入力する場合、EXEC ORACLE文の書式は次のとおりです。
EXEC ORACLE DEFINE <symbol>;
用途
後続のEXEC SQL OBJECT CREATE文とEXEC SQL OBJECT DEREF文に使用される確保継続時間を設定します。キャッシュ内のオブジェクトは、保持期間の終わりに暗黙的に解放されます。
構文
DURATION={TRANSACTION | SESSION}
デフォルト値
TRANSACTION
使用上の注意
EXEC ORACLE OPTION文を使用してインライン入力できます。
TRANSACTIONは、オブジェクトがトランザクションの完了時に暗黙的に解放されることを意味します。
SESSIONは、オブジェクトが接続の終了時に暗黙的に解放されることを意味します。
用途
このマイクロ・オプションでは、動的SQL方法4の記述子の動作を指定します。MODEの設定によりDYNAMICの設定が決まります。
構文
DYNAMIC={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
EXEC ORACLE OPTION文を使用してインライン入力できません。
用途
エラー・メッセージを端末とリスト・ファイルの両方に送信するか、リスト・ファイルにのみ送信するかを指定します。
構文
ERRORS={YES|NO
}
デフォルト値
YES
使用上の注意
ERRORS=YES
の場合、エラー・メッセージは端末とリスト・ファイルの両方に送信されます。
ERRORS=NO
の場合、エラー・メッセージはリスト・ファイルにのみ送信されます。
型ファイルの処理中に生成されたエラーを書き込む出力ファイルを指定します。省略すると、エラーは画面に出力されます。
構文
ERRTYPE=filename
デフォルト値
なし
使用上の注意
生成されるエラー・ファイルは1つのみです。複数の値を入力すると、最後の値がプリコンパイラで使用されます。
アプリケーションが通知の登録および受信に対応しているかどうかを指定します。
構文
EVENTS={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインからのみ入力できます。
用途
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のみ)、NUMBER
、RAW
、LONG
RAW
、VARRAW
、ROWID
および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ラベルおよびホスト変数の前に付けるオプションのコロン
用途
COBOLまたはFORTRANで入力する行の書式を指定します。
構文
FORMAT={ANSI|TERMINAL}
デフォルト値
ANSI
使用上の注意
インラインでは入力できません。
入力行の書式は、システムによって異なります。システム固有のOracleマニュアルをチェックしてください。
FORMAT=ANSI
の場合、入力行の書式は、できるかぎり現行のANSI規格に準拠します。
用途
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=extension
デフォルト値
なし
使用上の注意
ヘッダー・ファイルをプリコンパイルする場合、このオプションは必須で、ヘッダー・ファイルのプリコンパイルによって生成される出力ファイルのファイル拡張子の指定に使用されます。
通常のPro*C/C++プログラムをプリコンパイルする場合、このオプションは任意です。指定すると、Pro*C/C++プログラムのプリコンパイル時に、プリコンパイル済ヘッダーのメカニズムを使用できます。
どちらの場合も、このオプションで#includeディレクティブの処理時に使用するファイル拡張子も指定できます。指定した拡張子の付いた#includeファイルが存在する場合、Pro*C/C++ではそのファイルをPro*C/C++によって以前に生成されたプリコンパイル済ヘッダー・ファイルとみなします。#includeディレクティブを処理してインクルードされるヘッダー・ファイルをプリコンパイルするかわりに、そのファイルのデータをインスタンス化します。
このオプションは、コマンドラインまたは構成ファイルでのみ使用できます。インラインでは使用できません。このオプションを使用する場合は、ファイル拡張子のみを指定します。ファイル・セパレータは含めないでください。たとえば、拡張子にピリオド(.)は含めないでください。
カーソル・キャッシュでの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={COB74|COBOL}
デフォルト値
COBOL
使用上の注意
インラインでは入力できません。
COB74はANSI承認COBOLの1974版を指し、COBOLは1985版を指します。プラットフォームによっては、これ以外の値を使用できる場合もあります。
新しいバッチ挿入の開始前に、暗黙的セーブポイントを設定するかどうかを制御します。
構文
implicit_svpt={YES|NO}
デフォルト値
NO
使用上の注意
implict_svpt=yesの場合、新しい行のバッチを開始する前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的にセーブポイントへのロールバックが実行されます。このオプションはDB/2との互換性のためのもので、余分なラウンドトリップが必要なことから、明らかにマイナスです。
implict_svpt=noの場合、暗黙的セーブポイントは設定されません。バッファ挿入時にエラーが発生すると、アプリケーションに報告されますが、ロールバックは実行されません。
用途
構文
INAME=
filename
デフォルト値
なし
使用上の注意
インラインでは入力できません。
コマンドラインで入力ファイルの名前を指定する場合、キーワードのINAMEは省略可能です。たとえば、Pro*COBOLでは、INAME=myprog.pco
のかわりに、myprog.pcoと指定できます。
プリコンパイラでは、標準の入力ファイル拡張子(表6-5を参照)とみなされます。したがって、拡張子が非標準の場合を除き、INAMEの指定にファイル拡張子を使用する必要はありません。たとえば、Pro*FORTRANでは、myprog.pfoのかわりに、myprogと指定できます。
Pro*COBOLの場合のみ、INAME
を指定する際に非標準の入力ファイル拡張子を使用すると、HOSTも指定する必要があります。
用途
EXEC SQL INCLUDEファイルのディレクトリ・パスを指定します。これは、ディレクトリを使用するオペレーティング・システム専用です。
構文
INCLUDE=path
デフォルト値
現在のディレクトリ
使用上の注意
通常、INCLUDE
は、SQLCAファイルおよびORACAファイルのディレクトリ・パスの指定に使用します。プリコンパイラでは、最初に現在のディレクトリを検索し、次にINCLUDE
で指定したディレクトリを検索して、最後に標準のINCLUDE
ファイル用のディレクトリを検索します。このため、SQLCAやORACAなどの標準ファイルのディレクトリ・パスを指定する必要はありません。
しかし、標準以外のファイルについては、現在のディレクトリに格納されている場合を除いて、INCLUDE
を使用してディレクトリ・パスを指定する必要があります。コマンドラインでは、次のように複数のパスを指定できます。
... INCLUDE=<path1> INCLUDE=<path2> ...
プリコンパイラでは、最初に現在のディレクトリを検索し、次にpath1で指定したディレクトリを検索し、続いてpath2で指定したディレクトリを検索して、最後に標準のINCLUDE
ファイル用のディレクトリを検索します。
ディレクトリ・パスを指定しても、プリコンパイラでは最初に現在のディレクトリでファイルを検索します。このため、INCLUDE
するファイルが別のディレクトリにある場合は、同じ名前のファイルが現在のディレクトリに存在しないことを確認してください。
ディレクトリ・パスを指定する構文は、システムによって異なります。使用しているオペレーティング・システムの規則に従ってください。
用途
構文
IRECLEN=
integer
デフォルト値
80
使用上の注意
インラインでは入力できません。
IRECLENにはORECLENの値より大きい値は指定できません。指定可能な最大値はシステムによって異なります。
OTTで生成された型のファイルを1つ以上指定します(アプリケーションでオブジェクト型が使用される場合にのみ必要です)。
構文
INTYPE=(file_1,file_2,...,file_n)
デフォルト値
なし
使用上の注意
Pro*C/C++コードには、オブジェクト型ごとに1つの型のファイルが存在します。
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ディレクティブを挿入させることができます。 |
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=filename
デフォルト値
input.LIS(inputは入力ファイルの基底名)
使用上の注意
インラインでは入力できません。
デフォルトでは、リスト・ファイルは現在のディレクトリに作成されます。
用途
構文
LRECLEN=
integer
デフォルト値
132
使用上の注意
インラインでは入力できません。
LRECLENの値の範囲は80~255です。80未満の値を指定した場合は、かわりに80が使用されます。範囲を超える値を指定すると、かわりに255が使用されます。行番号を挿入できるようにするには、LRECLENの値がIRECLENより8以上大きくなるように指定してください。
用途
構文
LTYPE={LONG|SHORT|NONE}
デフォルト値
LONG
使用上の注意
インラインでは入力できません。
LTYPE=LONG
の場合、入力行はリスト・ファイルに表示されます。LTYPE=SHORT
の場合、入力行はリスト・ファイルに表示されません。LTYPE=NONE
の場合、リストは作成されません。
用途
コンパイラの制限を超えないように、プリコンパイラで生成される文字列リテラルの最大長を指定します。たとえば、コンパイラで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=
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の値で十分です。
INSERT文を実行する前に、バッファに格納する必要のある行数を制御します。
構文
max_row_insert={バッファに格納される行数}
デフォルト値
0
使用上の注意
ゼロより大きい数を指定すると、バッファ挿入機能が有効になり、INSERT文が実行される前に、その行数がバッファに格納されます。
用途
プログラムが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固定長文字列と同じように扱われます。そして、そのような値について割当て、比較、INSERT
、UPDATE
、SELECT
または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設定の相互作用を示しています。その他の組合せは互換性がないか、お薦めできません。
用途
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プログラム・ユニットが含まれる入力ファイルの場合、プリコンパイラではそれぞれのユニットで同じ宣言が生成されます。
ネイティブfloat/doubleをサポートします。
構文
NATIVE_TYPES = {YES|NO}
デフォルト値
NO
使用上の注意
ネイティブfloatおよびネイティブdoubleデータ型は、単精度と倍精度の浮動小数点値を表します。これらはネイティブ、つまりホスト・システムの浮動小数点形式で表されます。
プリコンパイラでマルチバイト文字変数として扱われるCホスト文字変数を指定します。
構文
NLS_CHAR=varnameまたはNLS_CHAR=(var_1,var_2,...,var_n)
デフォルト値
なし。
使用上の注意
コマンドラインまたは構成ファイルでのみ入力できます。
このオプションを使用すると、プリコンパイラでマルチバイト文字変数として扱う必要のある1つ以上のホスト変数のリストを、プリコンパイル時に指定できます。このオプションでは、C言語のchar変数またはPro*C/C++のVARCHAR変数のみを指定できます。
オプション・リストにプログラムで宣言していない変数を指定しても、プリコンパイラのエラーは発生しません。
プリコンパイラのSQLLIBランタイム・ライブラリとデータベース・サーバーのうち、どちらでマルチバイト・キャラクタ・セット変換が実行されるかを指定します。
構文
NLS_LOCAL={NO | YES}
デフォルト値
NO
使用上の注意
YESに設定すると、Pro*C/C++およびSQLLIBライブラリによって、ローカル・マルチバイト・サポートが提供されます。どのCホスト変数がマルチバイトかを指定するには、NLS_CHARオプションを使用する必要があります。
NOに設定すると、Pro*C/C++では、データベース・サーバーのマルチバイト・オブジェクトのサポートを使用します。新規アプリケーションにはすべて、NLS_LOCALをNOに設定してください。
環境変数NLS_NCHARには、有効な固定幅の各国語キャラクタ・セットを設定する必要があります。可変長幅の各国語キャラクタ・セットはサポートされていません。
コマンドラインまたは構成ファイルでのみ入力できます。
用途
出力ファイル名を指定します。
構文
ONAME=
filename
デフォルト値
システム依存
使用上の注意
インラインでは入力できません。
このオプションは、出力ファイルの名前が入力ファイルの名前と異なる場合に、出力ファイルの名前を指定するために使用します。たとえば、次のコマンドを発行したとします。
procob INAME=my_test
デフォルトの出力ファイル名はmy_test.cobです。出力ファイル名をmy_test_1.cobにする場合は、次のコマンドを発行します。
procob INAME=my_test ONAME=my_test_1.cob
ONAMEを使用して指定するファイルには、.cob拡張子を付けてください。ONAMEオプションにはデフォルトの拡張子はありません。
出力ファイル名にはデフォルトの名前を使用するのではなく、ONAMEで明示的に名前を指定することをお薦めします。
用途
プログラムでOracle通信領域(ORACA)を使用できるかどうかを指定します。
構文
ORACA={YES|NO}
デフォルト値
NO
使用上の注意
ORACA=YES
の場合、プログラムにINCLUDE
ORACA文を記述する必要があります。
用途
出力ファイルのレコード長を指定します。
構文
ORECLEN=
integer
デフォルト値
80
使用上の注意
インラインでは入力できません。
ORECLENにはIRECLENの値以上の値を指定する必要があります。指定可能な最大値はシステムによって異なります。
SQL文用にアウトラインSQLファイルを生成する必要があることを指定します。
構文
outline={yes | no | category_name}
デフォルト値
なし
使用上の注意
値がyes
の場合、アウトラインSQLファイルはDEFAULTカテゴリにあり、生成されるアウトラインの書式は次のようになります。
DEFAULT_<filename>_<filetype>_<sequence_no>
カテゴリ名が指定されている場合、SQLファイルは指定されたカテゴリ内に生成されます。この場合に生成されるアウトラインの書式は次のようになります。
<category_name>_<filename>_<filetype>_<sequence_no>
値がno
の場合、アウトラインSQLファイルは生成されません。
このオプションをオンにした場合、セマンティック・チェックは完全に行われます(sqlcheck=full/semantics)。sqlcheck=syntax/limited/noneの場合、エラーが生成されます。
アウトライン名の生成を制御します。
構文
outlnprefix={none | prefix_name}
デフォルト値
なし
使用上の注意
outlnprefix=prefix_nameの場合、次のアウトライ書式
<category_name>_<filename>_<filetype>
は、アウトライン名の<prefix_name>
に置換されます。
アウトライン名の長さが30バイトを超える場合、このオプションは、接頭辞名のみを指定できるので、ユーザーにとっては便利です。
outlnprefix=noneの場合、アウトライン名はシステムによって生成されます。生成される書式は次のとおりです。
<category_name>_<filename>_<filetype>_<sequence_no>
このオプションをオンにした場合、セマンティック・チェックは完全に行われます(sqlcheck=full/semantics)。sqlcheck=syntax/limited/noneまたはoutline=false(あるいはその両方)の場合、エラーが生成されます。
用途
リスト・ファイルの1物理ページ当たりの行数を指定します。
構文
PAGELEN=
integer
デフォルト値
66
使用上の注意
インラインでは入力できません。
指定可能な最大値はシステムによって異なります。
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=integer
デフォルト値
1
使用上の注意
構成ファイルまたはコマンドラインで入力できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。
インラインで使用する場合、明示カーソルのあるOPEN文の前に置く必要があります。次に、OPENが実行されるときに事前にフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。
指定可能な値の範囲は0~65535です。
用途
カーソル・キャッシュでの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={yes | no}
デフォルト値
なし
使用上の注意
runoutline=yesの場合、生成されたアウトライン作成文が、正常なプリコンパイルの最後に、プリコンパイラまたはトランスレータによって実行されます。
runoutlineの使用時には、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションをオンにした場合、セマンティック・チェックは完全に行われます(sqlcheck=full/semantics)。sqlcheck=syntax/limited/noneの場合、エラーが生成されます。
用途
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={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
を指定した場合、次のものを対象とした構文およびセマンティックのチェックが行われます。
INSERT
やUPDATE
などのデータ操作文
PL/SQLブロック
ただし、リモートのデータ操作文(AT db_name句を使用する文)については、構文チェックのみが行われます。
プリコンパイラでは、セマンティック・チェックに必要な情報を、埋め込まれたDECLARE
TABLE
文から取得します。USERID
オプションが指定されている場合は、Oracleに接続し、データ・ディクショナリにアクセスして取得します。データ操作文またはPL/SQLブロックで参照される表がすべてDECLARE TABLE
文で定義されていれば、Oracleに接続する必要はありません。
Oracleに接続してもデータ・ディクショナリで見つからない情報がある場合は、DECLARE TABLE
文を使用して、欠けている情報を提供する必要があります。プリコンパイル時には、DECLARE TABLE
文の定義とデータ・ディクショナリの定義が矛盾する場合、前者が優先されます。
新しいプログラムをプリコンパイルするときには、SQLCHECK=SEMANTICS
を指定してください。ホスト・プログラムにPL/SQLブロックを埋め込む場合は、SQLCHECK=SEMANTICS
とUSERID
オプションを指定する必要があります。
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を参照してください。
動的SQL文の文キャッシュ・サイズを指定します。
構文
STMT_CACHE = 範囲は0~65535
デフォルト値
0
使用上の注意
stmt_cacheオプションは、アプリケーションで予想される数の個別の動的SQL文を保持するために設定されます。
THREADS=YESの場合、プリコンパイラではコンテキスト宣言を検索します。
構文
THREADS={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
マルチスレッド・サポートを必要とするプログラムには、すべてこのオプションを指定する必要があります。
THREADS=YESの場合、最初のコンテキストが現れ、実効SQL文が見つかる前にEXEC SQL CONTEXT USEディレクティブが検出されないと、プリコンパイラではエラーが発生します。
このマイクロ・オプションは、動的SQL方法4でANSIまたはOracleのいずれのデータ型コードを使用するかを指定します。この設定は、MODEオプションの設定と同じです。
構文
TYPE_CODE={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
用途
UNSAFE_NULL=YES
を指定すると、インジケータ変数を使用せずにNULL
をフェッチしても、ORA-01405
メッセージは生成されません。
構文
UNSAFE_NULL={YES|NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
MODE=ORACLE
およびDBMS=V7の場合のみ、UNSAFE_NULL=YES
を指定できます。
埋込みPL/SQLブロックのホスト変数では、UNSAFE_NULL
オプションには何の効果もありません。ORA-01405
エラーを避けるには、インジケータ変数を使用する必要があります。
用途
Oracleユーザー名およびパスワードを指定します。
構文
USERID=
username
/
password
デフォルト値
None
使用上の注意
インラインでは入力できません。
先頭にOracle初期化パラメータOS_AUTHENT_PREFIX
の付いたOracleユーザー名しか受け入れない自動接続機能を使用している場合は、このオプションを使用しないでください。
SQLCHECK=SEMANTICS
の場合、Oracleに接続し、データ・ディクショナリにアクセスして、プリコンパイルに必要な情報を取得させるには、USERIDも指定する必要があります。
用途
UNICODE(UTF16)変数で使用されるキャラクタ・セットの形式を指定します。
構文
UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}
デフォルト値
NCHAR_CHARSET
使用上の注意
コマンドラインまたは構成ファイルでのみ使用でき、インラインでは使用できません。
UTF16_CHARSET=NCHAR_CHARSET(デフォルト)の場合、UNICODE(UTF16)のバインドまたは定義バッファは、サーバー側の各国語キャラクタ・セットに従って変換されます。ターゲット列がCHARの場合は、パフォーマンスが低下することがあります。
UTF16_CHAR=DB_CHARSETの場合、UNICODE(UTF16)バインドまたは定義バッファは、データベースのキャラクタ・セットに従って変換されます。
注意: ターゲット列がNCHARの場合、データが失われることがあります。 |
用途
Pro*COBOLの場合のみ、VARCHAR
オプションは、『Pro*COBOLプログラマーズ・ガイド』の第1章で説明されているCOBOLグループ項目をVARCHAR
データ型として扱うようにプリコンパイラに指示します。
構文
VARCHAR={YES|NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
VARCHAR=YES
の場合、『Pro*COBOLプログラマーズ・ガイド』の第1章で説明されている暗黙的なグループ項目は、長さフィールドおよび文字列フィールドを持つOracle VARCHAR外部データ型として受け入れられます。
VARCHAR=NO
の場合、Pro*COBOLプリコンパイラでは、暗黙的なグループ項目はVARCHAR
外部データ型としては受け入れられません。
用途
EXEC SQL OBJECT DEREF文によって戻されるオブジェクトのバージョンを指定します。
構文
VERSION={RECENT | LATEST | ANY}
デフォルト値
RECENT
使用上の注意
EXEC ORACLE OPTION文を使用してインラインで入力できます。
RECENTは、現行のトランザクションでオブジェクトが選択されてオブジェクト・キャッシュに入っている場合、そのオブジェクトが戻されることを意味します。シリアライズ可能モードで実行中のトランザクションの場合、このオプションの効果はLATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。ほとんどのアプリケーションには、RECENTが適切です。
LATESTは、オブジェクトがオブジェクト・キャッシュに存在しない場合、データベースから取得されることを意味します。オブジェクト・キャッシュに存在する場合は、サーバーからリフレッシュされます。LATESTを使用する場合、ネットワークのラウンドトリップ数が最大になるため注意してください。LATESTは、オブジェクト・キャッシュとサーバーのバッファ・キャッシュをできるかぎり一致させる必要がある場合にのみ使用してください。
ANYは、オブジェクトがすでにオブジェクト・キャッシュに存在している場合、そのオブジェクトが戻されることを意味します。キャッシュになければ、そのオブジェクトはサーバーから取得します。ANYを指定すると、ネットワークのラウンドトリップ数は最小になります。この値は、読取り専用オブジェクトにアクセスするアプリケーションや、ユーザーがオブジェクトに排他的にアクセスする場合に使用してください。
条件付きプリコンパイルでは、特定の条件に基づいて、ホスト・プログラム内のコード・セクションの組込み(または除外)を行います。たとえば、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つのファイルに記述されているか確認してください。
Oracleに接続するプログラム・モジュールをプリコンパイルするときは、MAXOPENCURSORSに、どのプログラム・モジュールにとっても十分な大きさの値を指定してください。MAXOPENCURSORSの値は、別のプログラム・モジュールに使用すると無視されます。実行時には、接続に有効な値のみが使用されます。
使用するSQLCAが1つのみの場合は、1つのプログラム・モジュールでそのSQLCAをグローバルに宣言する必要があります。
1つの明示カーソルの参照はすべて、同じプログラム・ファイル内にあることが必要です。別のモジュールでDECLAREされたカーソルの操作はできません。カーソルの詳細は、「埋込みSQLの使用方法」を参照してください。
実行可能プログラムを作成するには、プリコンパイラによって生成されたソース・ファイルをコンパイルし、その結果得られるオブジェクト・モジュールを、SQLLIBおよびシステム固有のOracleライブラリ内の必要なモジュールとリンクさせる必要があります。また、OCIコールを埋め込む場合も、必ずOCIランタイム・ライブラリ(OCILIB)にリンクしてください。
リンカーは、オブジェクト・モジュール内のシンボリック参照を解決します。これらの参照で競合が発生すると、リンクは失敗します。プリコンパイル済のプログラムにサード・パーティのソフトウェアをリンクしようとするときに、このような競合が発生する可能性があります。サード・パーティのソフトウェアにはOracleと互換性のないものもあるため、問題が生じます。Oracleカスタマ・サービスに問い合せて、使用するソフトウェアがサポートされているかどうかを確認してください。
コンパイルおよびリンクの方法はシステムによって異なります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。