6 Oracleプリコンパイラの実行
この章は、次の項で構成されています。
この章では、Oracleプリコンパイラを実行するための要件について詳しく説明します。プリコンパイル中に何が起こるか、プリコンパイラ・コマンドを発行する方法、多くの便利なプリコンパイラ・オプションを指定する方法、条件付きプリコンパイルと分割プリコンパイルの実行方法について学習します。
6.1 プリコンパイラのコマンド
Oracleプリコンパイラを実行するには、表6-1に示す言語固有のコマンドの1つを発行します。
表6-1 プリコンパイラの実行コマンド
ホスト言語 | プリコンパイラのコマンド |
---|---|
COBOL |
|
FORTRAN |
|
プリコンパイラの場所はシステムごとに異なります。通常、システム管理者またはデータベース管理者は、環境変数、論理名または別名を定義するか、その他のシステム固有の方法を使用して、プリコンパイラ実行ファイルをアクセス可能にします。
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
注意:
特定のオペレーティング・システム・オブジェクト(ファイル名など)の名前を指定しないオプション名とオプション値には、大文字と小文字の区別はありません。このマニュアルの例では、オプション名は大文字で記述し、オプション値は通常小文字で記述しています。プリコンパイラ実行ファイル自体の名前も含め、ファイル名を入力するときには、大文字と小文字の区別は、オペレーティング・システムの表記規則に従ってください。
6.2 プリコンパイル中の状況
プリコンパイル中、ホスト・プログラムに埋め込まれたSQL文は、Oracleプリコンパイラが生成するホスト言語コードに置き換えられます。生成されたコードには、各ホスト変数のデータ型、長さおよびアドレスを含むデータ構造体と、Oracleランタイム・ライブラリのSQLLIBで必要なその他の情報が含まれています。このコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。
生成されたコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。プリコンパイラでは、Oracle Call Interface(OCI)ルーチンに対するコールは生成されないので注意してください。
プリコンパイラでは、Oracle Call Interface(OCI)に対するコールは生成されません。
プリコンパイラは警告やエラー・メッセージを発行することがあります。これらのメッセージには接頭辞PCC-が付いており、『Oracle Databaseエラー・メッセージ』で説明されています。
6.3 プリコンパイラのオプション
プリコンパイル時には数多くの便利なオプションを使用できます。それらを使用して、リソースの使用、エラーの報告、入出力の書式化およびカーソルの管理を制御できます。コンパイラ・オプションを指定するには、次の構文を使用します。
<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のいずれの略語とも考えられるので、使用できません。
プリコンパイラのオプションについては、オンラインで便利なリファレンスを利用できます。オンラインの表示を見るには、オペレーティング・システムのプロンプトで、プリコンパイラ・コマンドを引数を指定せずに入力します。オンライン画面には、各オプションの名前および、構文、デフォルト値および用途が表示されます。アスタリスク(*)の付いたオプションは、インラインでもコマンドラインでも指定できます。
6.3.1 デフォルト値
多くのオプションにはデフォルト値があり、次の値によって決まります。
-
プリコンパイラに組み込まれた値
-
システム構成ファイルで設定された値
-
ユーザー構成ファイルで設定された値
-
インライン指定で設定された値セット
たとえば、MAXOPENCURSORSオプションでは、キャッシュ内のオープン・カーソルの最大数を指定します。このオプションのプリコンパイラに組み込まれたデフォルト値は10です。ただし、システム構成ファイルでMAXOPENCURSORS=32と指定されていると、デフォルトは32になります。ユーザー構成ファイルでは、これをさらに別の値に設定でき、これはシステム構成ファイルの値より優先されます。
次に、このオプションがコマンドラインで設定された場合、新しいコマンドライン値が優先されます。最終的には、インライン指定が前述のすべてのデフォルト値よりも優先されます。詳細は、「構成ファイル」を参照してください。
6.3.2 現在の値の確認
コマンドラインで疑問符(?)を使用すると、複数のオプションのカレント値を対話形式で調べることができます。たとえば、次のPro*COBOLコマンドを発行するとします。
procob ?
すべてのオプションの設定およびそのカレント値が端末に表示されます。この場合、値はプリコンパイラに組み込まれているもので、システム構成ファイルに値があれば、それが優先されます。一方、次のコマンドを発行したとします。
procob CONFIG=my_config_file.cfg ?
これでカレント・ディレクトリにmy_config_file.cfgというファイルがあると、my_config_file.cfgファイルのオプションが、その他のデフォルト値とともに表示されます。不足している値はユーザー構成ファイル内の値によって補われ、これらの値はプリコンパイラに組み込まれている値や、システム構成ファイルで指定されている値に優先します。
オプション名を指定し、その後に次の例のように=?を付ければ、1つのオプションの現在の値を確認できます。
procob MAXOPENCURSORS=?
注意:
一部のオペレーティング・システムでは、疑問符(?)の前にバックスラッシュなどのエスケープ文字を付ける必要がある場合があります。たとえば、Pro*COBOLオプションの設定値を表示するには、「procob ?」のかわりに、「procob \?」を使用する必要があります。
6.3.3 大文字と小文字の区別
一般に、コマンドライン・オプションの名前および値には、大文字と小文字のどちらも使用できます。しかし、UNIXのように大文字と小文字を区別するオペレーティング・システムの場合、プリコンパイラ実行ファイルの名前を含め、ファイル名の値は大文字と小文字の正しい組合せを使用して指定する必要があります。
6.3.4 構成ファイル
構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイルのそれぞれのレコード(行)には、1つのオプションおよび対応付けられた値が入ります。たとえば、構成ファイルに次のような行が入っているとします。
FIPS=YES MODE=ANSI
これらにより、FIPS
オプションとMODE
オプションのデフォルト値が設定されます。
システムにはそれぞれ1つの構成ファイルがあります。システム構成ファイルの名前はプリコンパイラ固有で、表6-2に示すとおりです。
表6-2 システム構成ファイル
プリコンパイラ | 構成ファイル |
---|---|
Pro*COBOL |
|
Pro*FORTRAN |
|
システム構成ファイルの位置はオペレーティング・システムによって異なります。ほとんどのUNIXシステムでは、Pro*COBOLの構成ファイルは通常$ORACLE_HOME/procobディレクトリにあり、Pro*FORTRANの構成ファイルは$ORACLE_HOME/proforディレクトリにあります($ORACLE_HOMEはデータベース・ソフトウェアの環境変数です)。
プリコンパイラの各ユーザーは、1つ以上のユーザー構成ファイルを持つことができます。構成ファイルの名前は、CONFIG
コマンドライン・オプションを使用して指定します。詳細は、「現在の値の確認」を参照してください。
注意:
構成ファイルはネストできません。CONFIGは、構成ファイル内では有効なオプションではありません。
6.4 オプションの入力
どのプリコンパイラ・オプションも、コマンドラインや(CONFIG
以外は)構成ファイルから入力できます。また、インラインで入力できるオプションも多数あります。プリコンパイラでは実行時に、これら3つのソースすべてから入力されたオプションを受け入れます。
6.4.3 長所
EXEC ORACLE
機能は、プリコンパイル中にオプションを変更するときに特に便利です。たとえば、HOLD_CURSOR
とRELEASE_CURSOR
の値を文ごとに変更できます。インライン・オプションを使用して実行時のパフォーマンスを最適化する方法については、パフォーマンス・チューニングを参照してください。
インラインでのオプションの指定は、オペレーティング・システムでコマンドラインでの入力文字数が制限されている場合にも便利であり、インライン・オプションは構成ファイルに格納できます(これについては次の項で説明します)。
6.4.4 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; ...
6.4.7 構成ファイルの使用について
構成ファイル内の各レコード(行)には、コマンドライン・オプションが1つ入っています。たとえば、構成ファイルには、FIPS
、MODE
およびSQLCHECKの各オプションのデフォルト値を設定する次の行が含まれている場合があります。
FIPS=YES MODE=ANSI SQLCHECK=SEMANTICS
Oracleプリコンパイラごとに、独自のシステム構成ファイルを設定できます。ファイルの名前や場所は、言語やシステム固有です。ファイルが見つからない場合、警告が表示されますが、プリコンパイラでは処理が続行されます。
1つの言語にはシステム構成ファイルが1つしかありませんが、ユーザー構成ファイルはいくつでも作成できます。特定のユーザー構成ファイルの名前と場所を指定するには、新しいコマンドライン・オプションCONFIGを次のように指定します。
... CONFIG=<filename>
構成ファイルはネストできません。したがって、構成ファイルでCONFIG
オプションは指定できません。また、インラインでCONFIG
を指定することもできません。
6.5 オプションの有効範囲
プリコンパイル・ユニットは、ホスト言語のコードと1つ以上の埋込みSQL文を含むファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのプリコンパイル・ユニットにのみ効力を持ちます。
たとえば、単位AにHOLD_CURSOR=YES
およびRELEASE_CURSOR=YES
を指定し、単位Bには指定しなかった場合、単位AのSQL文は指定したHOLD_CURSOR
およびRELEASE_CURSOR
の値で実行されますが、単位BのSQL文はデフォルト値で実行されます。ただし、Oracleに接続すると有効になるMAXOPENCURSORS設定は、その接続が続くかぎり有効です。
インライン・オプションの有効範囲は、論理的なものではなく、位置的なものです。つまり、インライン・オプションの影響を受けるのは、プログラム・ロジックの流れでそのインライン・オプションの後にくるSQL文ではなく、ソース・ファイル内でそのインライン・オプションの後に記述されているSQL文です。オプションの設定は、そのオプションを再指定しないかぎり、ファイルの終わりまで有効です。
6.6 クイック・リファレンス
表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|V7|V8 |
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 |
リスト内のクロス・リファレンス・セクション |
6.7 プリコンパイラ・オプションの使用方法について
この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。プリコンパイラ・オプションをアルファベット順に並べ、オプションごとに用途、構文およびデフォルト値を示しています。さらに「使用上の注意」で、オプションについて説明します。使用上の注意に特に記載がない場合、そのオプションはコマンドライン、インラインまたは構成ファイルのどの方法でも入力できます。
6.7.1 ASACC
用途
リスト・ファイルが、キャリッジ制御のために各行の最初の列を使用するASA規則に従うかどうかを指定します。
構文
ASACC={YES|NO
}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
6.7.2 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と同様の動作をします。
6.7.3 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
文を使用する必要があります。
6.7.4 CHAR_MAP
用途
char型またはchar[n]型のCホスト変数およびそれらに対するポインタのSQLへのデフォルトのマッピングを指定します。
構文
CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF}
デフォルト値
CHARZ
使用上の注意
旧リリースでは、SQL DECLARE文を使用してCHARなどのcharまたはchar[n]ホスト変数を宣言する必要がありました。外部データ型VARCHAR2およびCHARZが、Oracle7のデフォルト文字マッピングでした。
6.7.5 CINCR
用途
データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。
構文
CINCR = 範囲は1から(CMAX-CMIN)。
デフォルト値
1
使用上の注意
最初は、CMINにより指定されたとおりに物理接続がすべてサーバーに対してオープンされます。それ以降は、必要な場合にのみ物理接続がオープンされます。パフォーマンスを最適にするには、CMINを、アプリケーションによる実行が計画または予想される同時実行文の合計数に設定する必要があります。デフォルト値は2に設定されます。
6.7.6 CLOSE_ON_COMMIT
用途
コミット文でカーソルをクローズするかどうかを指定します。
構文
CLOSE_ON_COMMIT={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
CLOSE_ON_COMMITより高いレベルでMODEが指定されていると、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を発行すると、すべてのカーソルがクローズします。
6.7.7 CMAX
用途
データベースに対してオープンできる物理接続の最大数を指定します。
構文
CINCR = 範囲は1から65535
デフォルト値
100
使用上の注意
CMAXの値は、CMIN+CINCR以上である必要があります。この値に達したら、それ以上物理接続をオープンすることはできません。通常のアプリケーションでは、100のデータベース操作を同時実行できれば十分です。ユーザーが適切な値を設定できます。
6.7.8 CMIN
用途
データベースに対してオープンできる物理接続の最小数を指定します。
構文
CINCR = 範囲は1から(CMAX-CINCR)。
デフォルト値
2
使用上の注意
CMAXの値は、CMIN+CINCR以上である必要があります。この値に達したら、それ以上物理接続をオープンすることはできません。通常のアプリケーションでは、100のデータベース操作を同時実行できれば十分です。ユーザーが適切な値を設定できます。
6.7.9 CNOWAIT
用途
この属性は、プール内の他のすべての物理接続が使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。
構文
CNOWAIT = 範囲は1から65535。
デフォルト値
未設定を意味する0。
使用上の注意
物理接続が使用できず、これ以上物理接続をオープンできない場合、この属性が設定されているとエラーが発生します。そうでない場合、コールは別の接続が取得されるまで待機します。デフォルトでは、CNOWAITは設定されないため、スレッドは、エラーを戻すかわりに、空いている接続を取得できるまで待機します。
6.7.10 CODE
用途
Pro*C/C++プリコンパイラによって生成されるC関数プロトタイプの書式を指定します。(関数プロトタイプは、関数とその引数のデータ型を宣言します。)プリコンパイラは、Cコンパイラが外部参照を解決できるよう、SQLライブラリ・ルーチンのために関数プロトタイプを生成します。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++互換コードが生成されます。
6.7.11 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
ブロックには、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
は不要です。
6.7.12 COMMON_PARSER
用途
SQL99構文のSELECT、INSERT、DELETE、UPDATEおよびDECLARE CURSOR文のカーソル本体がサポートされます。
構文
COMMON_PARSER={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインで入力できます。
6.7.13 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が設定されていると、このオプションは効果がありません。
6.7.14 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が設定されていると、このオプションは効果がありません。
6.7.15 CONFIG
用途
ユーザー構成ファイルの名前を指定します。
構文
CONFIG=
filename
デフォルト値
None
使用上の注意
コマンドラインでのみ入力できます。
Oracleプリコンパイラでは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。デフォルトでは、システム構成ファイルと呼ばれるテキスト・ファイルが使用されます。ただし、ユーザー構成ファイルと呼ばれるいくつかの代替ファイルを指定できます。
構成ファイルはネストできません。したがて、構成ファイルではCONFIG
オプションを指定できません。
6.7.16 CPOOL
用途
このオプションに基づき、プリコンパイラでは、SQLLIBに接続プール機能を有効または無効にするように指示する適切なコードを生成します。
構文
CPOOL = {YES|NO}
デフォルト値
NO
使用上の注意
このオプションがNOに設定されている場合、プリコンパイラではその他の接続プーリング・オプションを無視します。
6.7.17 CPP_SUFFIX
用途
CPP_SUFFIXオプションを使用すると、CODE=CPPオプションを指定した場合に生成されるC++出力ファイルに、プリコンパイラによって付けられるファイル拡張子を指定できます。
構文
CPP_SUFFIX=filename_extension
デフォルト値
システム固有。
使用上の注意
ほとんどのCコンパイラでは、入力ファイルのデフォルト拡張子は.cになります。しかし、C++コンパイラでは、ファイル名の拡張子がコンパイラごとに異なる場合があります。CPP_SUFFIXオプションを指定すると、プリコンパイラで生成されるファイル名拡張子を指定できます。このオプションの値は、引用符もピリオドも付けない文字列です。たとえば、CPP_SUFFIX=ccまたはCPP_SUFFIX=Cのように指定します。
6.7.18 CTIMEOUT
用途
指定した時間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続を最適な数に保ちます。
構文
CTIMEOUT = 範囲は1から65535。
デフォルト値
未設定を意味する0。
使用上の注意
接続プールが終了されるまで、物理接続はクローズされません。新しい物理接続を作成すると、サーバーへのラウンド・トリップが必要になります。
6.7.20 DBMS
用途
OracleがOracle9i、Oracle8i、Oracle8、Oracle7、あるいはOracleのネイティブ・バージョン(つまり、アプリケーションが接続しているバージョン)のうち、どの意味上および構文上の規則に従うかを指定します。
構文
DBMS=NATIVE|V7|V8
デフォルト値
NATIVE
使用上の注意
インラインでは入力できません。
DBMSオプションを使用すると、Oracleのバージョン固有の動作を制御できます。DBMS=NATIVE (デフォルト)の場合、Oracleは、Oracleのネイティブ・バージョンの意味および構文上の規則に従います。
DBMS=V8またはDBMS=V7のときは、OracleはそれぞれOracle9iの規則(Oracle7、Oracle8およびOracle8iの場合と同じ規則)に従います。
表6-4は、互換性のあるDBMS
とMODE
の設定がどのように相互に作用するかを示しています。その他の組合せはすべて互換性がなく、推奨できません。
表6-4 互換性のあるDBMSおよびMODE設定
状況 | DBMS=V7/V8 MODE=ANSI | DBMS=V7/V8 MODE=ORACLE |
---|---|---|
「データが見つかりません」という警告コード |
+100 |
+1403 |
インジケータ変数を使用しないNULLのフェッチ |
エラー-1405 |
エラー-1405 |
インジケータ変数を使用しない切捨て値のフェッチ |
エラーなしでSQLWARN(2)設定 |
エラーなしでSQLWARN(2)設定 |
COMMITまたはROLLBACKによるカーソルのクローズ |
すべて明示的 |
CURRENT OFのみ |
すでにオープンしているカーソルのオープン |
エラー-2117 |
エラーなし |
すでにクローズしているカーソルのクローズ |
エラー-2114 |
エラーなし |
SQLグループ関数によるNULLの無視 |
警告なし |
警告なし |
複数行の問合せでSQLグループ関数をコールするとき |
FETCH時 |
FETCH時 |
SQLCA構造体の宣言 |
オプション |
必須 |
SQLCODEまたはSQLSTATE状態変数の宣言 |
必須 |
指定できるがOracleでは無視 |
TYPE文およびVAR文でCHARに使用される文字ホスト変数のデフォルト外部データ型 |
CHARF |
VARCHAR2 |
SQL文における文字列リテラルのデフォルトの外部データ型 |
CHARF |
CHARF |
SQL文におけるCHAR変数のデフォルトの内部データ型 |
CHAR |
CHAR |
PL/SQLブロックにおけるCHAR変数のデフォルトの外部データ型 |
CHARF |
CHARF |
USERファンクションから戻される値のデフォルトの外部データ型 |
CHARF |
CHARF |
DESCRIBEコードから戻される外部データ型(動的SQL方法4) |
96 |
96 |
整合性制約 |
有効 |
有効 |
ロールバック・セグメント用のPCTINCREASE |
使用不可 |
使用不可 |
MAXEXTENTS記憶域パラメータ |
使用不可 |
使用不可 |
6.7.21 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を組み込まなければ、このオプションを使用するとプリコンパイル時にエラーが発生します。
6.7.23 DURATION
用途
後続のEXEC SQL OBJECT CREATE文とEXEC SQL OBJECT DEREF文に使用される確保継続時間を設定します。キャッシュ内のオブジェクトは、保持期間の終わりに暗黙的に解放されます。
構文
DURATION={TRANSACTION | SESSION}
デフォルト値
TRANSACTION
使用上の注意
EXEC ORACLE OPTION文を使用してインライン入力できます。
TRANSACTIONは、オブジェクトがトランザクションの完了時に暗黙的に解放されることを意味します。
SESSIONは、オブジェクトが接続の終了時に暗黙的に解放されることを意味します。
6.7.24 DYNAMIC
用途
このマイクロ・オプションでは、動的SQL方法4の記述子の動作を指定します。MODEの設定によりDYNAMICの設定が決まります。
構文
DYNAMIC={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
EXEC ORACLE OPTION文を使用してインラインで入力することはできません。
6.7.26 ERRTYPE
用途
型ファイルの処理中に生成されたエラーを書き込む出力ファイルを指定します。省略すると、エラーは画面に出力されます。
構文
ERRTYPE=filename
デフォルト値
なし
使用上の注意
生成されるエラー・ファイルは1つのみです。複数の値を入力すると、最後の値がプリコンパイラで使用されます。
6.7.27 EVENTS
用途
アプリケーションが通知の登録および受信に対応しているかどうかを指定します。
構文
EVENTS={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインからのみ入力できます。
6.7.28 FIPS
用途
構文
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データ型の同値化文 -
AT db_name句
-
DECLARE
...DATABASE
文、...STATEMENT
文および...TABLE
文 -
WHENEVER
文でのSQLWARNING条件 -
WHENEVER
文でのDO
およびSTOP
アクション -
COMMIT
文でのCOMMENT
句およびFORCE
TRANSACTION
句 -
ROLLBACK
文でのFORCE
TRANSACTION
句およびTO
SAVEPOINT
句 -
COMMIT
文およびROLLBACK
文でのRELEASE
パラメータ -
INTO
句のWHENEVER
...DOラベルおよびホスト変数の前に付けるオプションのコロン
6.7.30 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サーバーからはエラーが戻されます。
6.7.31 HEADER
用途
プリコンパイル済ヘッダー・ファイルを許可します。プリコンパイル済ヘッダー・ファイルのファイル拡張子を指定します。
構文
HEADER=extension
デフォルト値
NONE
使用上の注意
ヘッダー・ファイルをプリコンパイルする場合、このオプションは必須で、ヘッダー・ファイルのプリコンパイルによって生成される出力ファイルのファイル拡張子の指定に使用されます。
通常のPro*C/C++プログラムをプリコンパイルする場合、このオプションは任意です。指定すると、Pro*C/C++プログラムのプリコンパイル時に、プリコンパイル済ヘッダーのメカニズムを使用できます。
どちらの場合も、このオプションで#includeディレクティブの処理時に使用するファイル拡張子も指定できます。指定した拡張子の付いた#includeファイルが存在する場合、Pro*C/C++ではそのファイルをPro*C/C++によって以前に生成されたプリコンパイル済ヘッダー・ファイルとみなします。Pro*C/C++は、#includeディレクティブを処理してインクルードされるヘッダー・ファイルをプリコンパイルするかわりに、そのファイルからデータをインスタンス化します。
このオプションは、コマンドラインまたは構成ファイルでのみ使用できます。インラインでは使用できません。このオプションを使用する場合は、ファイル拡張子のみを指定します。ファイル・セパレータは含めないでください。たとえば、拡張子にピリオド(.)は含めないでください。
6.7.32 HOLD_CURSOR
用途
カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの処理方法を指定します。
構文
HOLD_CURSOR={YES|NO}
デフォルト値
NO
使用上の注意
HOLD_CURSOR
を使用すると、プログラムのパフォーマンスを改善できます。詳細は、パフォーマンス・チューニングを参照してください。
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を参照してください。
6.7.34 IMPLICIT_SVPT
用途
新しいバッチ挿入の開始前に、暗黙的セーブポイントを設定するかどうかを制御します。
構文
implicit_svpt={YES|NO}
デフォルト値
NO
使用上の注意
implict_svpt=yesの場合、新しい行のバッチを開始する前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的な「セーブポイントへのロールバック」が実行されます。このオプションはDB/2との互換性のためのもので、余分なラウンドトリップが必要なことから、明らかにマイナスです。
implict_svpt=noの場合、暗黙的セーブポイントは設定されません。バッファ済INSERTでエラーが発生すると、アプリケーションに通知されますが、ロールバックは実行されません。
6.7.35 INAME
用途
構文
INAME=
filename
デフォルト値
None
使用上の注意
インラインでは入力できません。
コマンドラインで入力ファイルの名前を指定する場合、キーワードのINAMEは省略可能です。たとえば、Pro*COBOLでは、INAME=myprog.pco
のかわりに、myprog.pcoと指定できます。
プリコンパイラでは、標準の入力ファイル拡張子(表6-5を参照)とみなされます。したがって、拡張子が非標準の場合を除き、INAMEの指定にファイル拡張子を使用する必要はありません。たとえば、Pro*FORTRANでは、myprog.pfoのかわりに、myprogと指定できます。
表6-5 入力ファイルの拡張子
ホスト言語 | 標準のファイル拡張子 |
---|---|
COBOL |
|
FORTRAN |
|
Pro*COBOLの場合のみ、INAME
を指定する際に非標準の入力ファイル拡張子を使用すると、HOSTも指定する必要があります。
6.7.36 INCLUDE
用途
構文
INCLUDE=path
デフォルト値
現在のディレクトリ
使用上の注意
通常、INCLUDE
は、SQLCAファイルおよびORACAファイルのディレクトリ・パスの指定に使用します。プリコンパイラでは、最初にカレント・ディレクトリを検索し、次にINCLUDE
で指定されたディレクトリを検索して、最後に標準のINCLUDE
ファイル用のディレクトリを検索します。このため、SQLCAやORACAなどの標準ファイルのディレクトリ・パスを指定する必要はありません。
標準以外のファイルについては、現在のディレクトリに格納されている場合を除いて、INCLUDE
を使用してディレクトリ・パスを指定する必要があります。次に示すように、コマンドラインに複数のパスを指定できます。
... INCLUDE=<path1> INCLUDE=<path2> ...
プリコンパイラでは、最初に現在のディレクトリを検索し、次にpath1で指定したディレクトリを検索し、続いてpath2で指定したディレクトリを検索して、最後に標準のINCLUDE
ファイル用のディレクトリを検索します。
ディレクトリ・パスを指定しても、プリコンパイラでは最初に現在のディレクトリでファイルを検索します。このため、INCLUDE
するファイルが別のディレクトリにある場合は、同じ名前のファイルが現在のディレクトリに存在しないことを確認してください。
ディレクトリ・パスを指定するための構文はシステムによって異なります。使用しているオペレーティング・システムの規則に従って指定してください。
6.7.38 INTYPE
用途
OTTで生成された型のファイルを1つ以上指定します(アプリケーションでオブジェクト型が使用される場合にのみ必要です)。
構文
INTYPE=(file_1,file_2,...,file_n)
デフォルト値
なし
使用上の注意
Pro*C/C++コードには、オブジェクト型ごとに1つの型のファイルが存在します。
6.7.39 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ディレクティブを挿入させることができます。
6.7.40 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値で指定したデリミタを生成します。
6.7.41 LNAME
用途
リスト・ファイルのデフォルト以外の名前を指定します。
構文
LNAME=filename
デフォルト値
input.LIS(inputは入力ファイルの基底名)
使用上の注意
インラインでは入力できません。
デフォルトでは、リスト・ファイルはカレント・ディレクトリに作成されます。
6.7.44 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文を無視して、処理を続行します。
6.7.45 MAXOPENCURSORS
用途
同時にオープンされ、プリコンパイラによりキャッシュに保存されたままになるカーソルの数を指定します。
構文
MAXOPENCURSORS=
integer
デフォルト値
10
使用上の注意
MAXOPENCURSORSを使用すると、プログラムのパフォーマンスを改善できます。詳細は、パフォーマンス・チューニングを参照してください。
個別にプリコンパイルする場合は、「分割プリコンパイル」の説明のように、MAXOPENCURSORSを指定してください。
MAXOPENCURSORSオプションには、SQLLIBカーソル・キャッシュの初期サイズを指定します。新しいカーソルが必要で、空いているキャッシュ・エントリがない場合、Oracleではエントリの再利用が試みられます。それが成功するどうかは、HOLD_CURSOR値およびRELEASE_CURSOR値によって決まり、明示カーソルの場合は、カーソル自体の状態によって決まります。再利用できるキャッシュ・エントリが見つからない場合、Oracleは追加のキャッシュ・エントリを割り当てます。Oracleは、空きメモリーがなくなるかOPEN_CURSORSで設定された限界に達するまで、必要に応じてキャッシュ・エントリの割当てを続行します。「最大オープン・カーソル数を超えました」というOracleエラーを避けるには、MAXOPENCURSORSにOPEN_CURSORSより6以上小さい値を指定してください。
プログラムが同時に必要とするオープン・カーソルの数が増えて、MAXOPENCURSORSを再指定する必要がある場合もあります。45から50の値を指定することは珍しくありませんが、ユーザー・プロセスのメモリー領域にカーソル1つにつき、1つのプライベートSQL領域が必要なことに注意してください。デフォルト値の10は、大半のプログラムには適切な値です。
6.7.46 MAX_ROW_INSERT
用途
INSERT文の実行前にバッファする必要がある行の数を制御します。
構文
max_row_insert={バッファに格納される行数}
デフォルト値
0
使用上の注意
0よりも大きい任意の値を指定すると、バッファ済INSERT機能が有効化され、INSERT文の実行前に多くの行がバッファされます。
6.7.47 MODE
用途
構文
MODE={ANSI|ISO|ANSI14|ISO14|ANSI13|ISO13|ORACLE}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
MODE
値のANSIとISO、ANSI14とISO14、ANSI13とISO13は、それぞれ等価です。
MODE=ORACLE
(デフォルト)の場合、埋込みSQLプログラムはOracleの動作規則に従います。
MODE={ANSI14|ANSI13}
の場合、プログラムは現行のANSI SQL規格にほぼ準拠します。
MODE=ANSI
の場合、プログラムは完全にANSI規格に準拠し、次のような変更が有効になります。
-
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設定の相互作用を示しています。その他の組合せは互換性がないか、お薦めできません。
6.7.48 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プログラム・ユニットが含まれる入力ファイルの場合、プリコンパイラではそれぞれのユニットで同じ宣言が生成されます。
6.7.49 NATIVE_TYPES
用途
ネイティブfloat/doubleをサポートします。
構文
NATIVE_TYPES = {YES|NO}
デフォルト値
NO
使用上の注意
ネイティブfloatおよびネイティブdoubleデータ型は、単精度と倍精度の浮動小数点値を表します。これらはネイティブ、つまりホスト・システムの浮動小数点形式で表されます。
6.7.50 NLS_CHAR
用途
プリコンパイラでマルチバイト文字変数として扱われるCホスト文字変数を指定します。
構文
NLS_CHAR=varnameまたはNLS_CHAR=(var_1,var_2,...,var_n)
デフォルト値
なし。
使用上の注意
コマンドラインまたは構成ファイルでのみ入力できます。
このオプションを使用すると、プリコンパイラでマルチバイト文字変数として扱う必要のある1つ以上のホスト変数のリストを、プリコンパイル時に指定できます。このオプションでは、C言語のchar変数またはPro*C/C++のVARCHAR変数のみを指定できます。
オプション・リストにプログラムで宣言していない変数を指定しても、プリコンパイラのエラーは発生しません。
6.7.51 NLS_LOCAL
用途
プリコンパイラのSQLLIBランタイム・ライブラリとデータベース・サーバーのうち、どちらでマルチバイト・キャラクタ・セット変換が実行されるかを指定します。
構文
NLS_LOCAL={YES | NO}
デフォルト値
NO
使用上の注意
YESに設定すると、Pro*C/C++およびSQLLIBライブラリによって、ローカル・マルチバイト・サポートが提供されます。どのCホスト変数がマルチバイトかを指定するには、NLS_CHARオプションを使用する必要があります。
NOに設定すると、Pro*C/C++では、データベース・サーバーのマルチバイト・オブジェクトのサポートを使用します。新規アプリケーションにはすべて、NLS_LOCALをNOに設定してください。
環境変数NLS_NCHARには、有効な固定幅の各国語キャラクタ・セットを設定する必要があります。可変長幅の各国語キャラクタ・セットはサポートされていません。
コマンドラインまたは構成ファイルでのみ入力できます。
6.7.53 ONAME
用途
出力ファイル名を指定します。
構文
ONAME=
filename
デフォルト値
System-dependent
使用上の注意
インラインでは入力できません。
このオプションは、出力ファイルの名前が入力ファイルの名前と異なる場合に、出力ファイルの名前を指定するために使用します。たとえば、次のコマンドを発行したとします。
procob INAME=my_test
デフォルトの出力ファイル名はmy_test.cobです。出力ファイル名をmy_test_1.cobにする場合は、次のコマンドを発行します。
procob INAME=my_test ONAME=my_test_1.cob
ONAMEを使用して指定するファイルには、.cob拡張子を付けてください。ONAMEオプションにはデフォルトの拡張子はありません。
出力ファイル名にはデフォルトの名前を使用するのではなく、ONAMEで明示的に名前を指定することをお薦めします。
6.7.54 ORACA
用途
プログラムでOracle通信領域(ORACA)を使用できるかどうかを指定します。
構文
ORACA={YES|NO}
デフォルト値
NO
使用上の注意
ORACA=YES
の場合、プログラムにINCLUDE
ORACA文を記述する必要があります。
6.7.55 ORECLEN
用途
出力ファイルのレコード長を指定します。
構文
ORECLEN=
integer
デフォルト値
80
使用上の注意
インラインでは入力できません。
ORECLENに指定する値は、IRECLENの値と同じか、それより大きい値にする必要があります。指定可能な最大値はシステムによって異なります。
6.7.56 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の場合は、エラーが生成されます。
6.7.57 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(あるいはその両方)の場合、エラーが生成されます。
6.7.58 PAGELEN
用途
リスト・ファイルの1物理ページ当たりの行数を指定します。
構文
PAGELEN=
integer
デフォルト値
66
使用上の注意
インラインでは入力できません。
指定可能な最大値はシステムによって異なります。
6.7.59 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以外の値です。使用するシステム固有のマニュアルを参照してください。
6.7.60 PREFETCH
用途
数行を事前にフェッチすることで、問合せの実行速度を向上させます。
構文
PREFETCH=integer
デフォルト値
1
使用上の注意
構成ファイルまたはコマンドラインで入力できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。
インラインで使用する場合、明示カーソルのあるOPEN文の前に置く必要があります。次に、OPENが実行されるときに事前にフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。
指定可能な値の範囲は0から65535です。
6.7.61 RELEASE_CURSOR
用途
カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの処理方法を指定します。
構文
RELEASE_CURSOR={YES|NO}
デフォルト値
NO
使用上の注意
RELEASE_CURSOR
を使用すると、プログラムのパフォーマンスを改善できます。詳細は、パフォーマンス・チューニングを参照してください。
SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリは、文の処理に必要な情報が格納されるOracleプライベートSQL領域にリンクされます。RELEASE_CURSOR
は、カーソル・キャッシュとプライベートSQL領域の間のリンクで発生する処理を制御します。
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-1を参照してください
6.7.62 RUNOUTLINE
用途
プリコンパイラを使用して、または後で開発者が手動で「CREATE OUTLINE」文を実行するオプションを提供します。
構文
runoutline={yes | no}
デフォルト値
なし
使用上の注意
runoutline=yesの場合は、プリコンパイルが正常に完了した後で、プリコンパイラ/トランスレータによって、生成された「CREATE OUTLINE」文が実行されます。
RUNOUTLINEを使用する場合は、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
6.7.63 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
句の有無を問わず、戻る行数が多すぎる場合にエラーが生成されます。
6.7.64 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
を指定した場合、次のものを対象とした構文およびセマンティックのチェックが行われます。
-
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
文がない表を参照する場合
次の表に、SQLCHECKによって行われるチェックについてまとめます。構文およびセマンティックのチェックの詳細は、構文およびセマンティックのチェックを参照してください。
文 | SQLCHECK=SEMANTIC: 構文 | SQLCHECK=SEMANTIC: セマンティック | SQLCHECK=SYNTAX: 構文 | SQLCHECK=SYNTAX: セマンティック | SQLCHECK=NONE: 構文 | SQLCHECK=NONE: セマンティック |
---|---|---|---|---|---|---|
DML |
◎ |
◎ |
◎ |
該当なし |
該当なし |
該当なし |
リモートDML |
◎ |
該当なし |
◎ |
該当なし |
該当なし |
該当なし |
PL/SQL |
◎ |
◎ |
該当なし |
該当なし |
該当なし |
該当なし |
6.7.65 STMT_CACHE
用途
動的SQL文の文キャッシュ・サイズを指定します。
構文
STMT_CACHE = 0から65535
デフォルト値
0
使用上の注意
stmt_cacheオプションを設定すると、アプリケーションでそれぞれの動的SQL文の予測数を保持できます。
6.7.66 SQLCHECK
用途
構文およびセマンティック・チェックの種類と範囲を指定します。埋込みSQL文およびPL/SQLブロックの構文および意味を検査することで、Pro*C/C++プリコンパイラはコーディングの誤りをすみやかに発見し修正できるように支援します。構文規則は、言語要素を並べて正しい文を作成する基準を示します。これにより、キーワード、オブジェクト名、演算子、デリミタなどのオブジェクトが、SQL文に正しく配置されていることを確認できます。
構文
SQLCHECK={SEMANTICS | FULL | SYNTAX}
デフォルト値
SYNTAX
機能
次の場合
SQLCHECK=SYNTAX
、
クライアント側SQLインタフェースを使用してSQL文の構文のみをチェックします。
次の場合
SQLCHECK=SEMANTICS
またはFULL
SQL文は、解析中に一般的な構文を使用してIDLオブジェクトにパッケージ化またはバンドルされます。一般的な構文では、SQL構文は解釈されず、ホスト変数、インジケータ変数および可能なSQL識別子のみが識別されます。意味フェーズ中に、現在SQLに対して行われている方法で、ホスト変数およびインジケータ変数の妥当性がチェックされます。同じ動作が、表名、列名、タイプなどのセマンティックに対して実行されます。
使用上の注意
6.7.67 THREADS
用途
THREADS=YESの場合、プリコンパイラではコンテキスト宣言を検索します。
構文
THREADS={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
マルチスレッド・サポートを必要とするプログラムには、すべてこのオプションを指定する必要があります。
THREADS=YESの場合、最初のコンテキストが現れ、実行SQL文が見つかる前にEXEC SQL CONTEXT USEディレクティブが検出されないと、プリコンパイラではエラーが発生します。
6.7.68 TYPE_CODE
用途
このマイクロ・オプションは、動的SQL方法4でANSIまたはOracleのいずれのデータ型コードを使用するかを指定します。この設定は、MODEオプションの設定と同じです。
構文
TYPE_CODE={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
6.7.69 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
エラーを避けるには、インジケータ変数を使用する必要があります。
6.7.70 USERID
用途
Oracleユーザー名およびパスワードを指定します。
構文
USERID=
username
/
password
デフォルト値
None
使用上の注意
インラインでは入力できません。
先頭にOracle初期化パラメータOS_AUTHENT_PREFIX
の付いたOracleユーザー名しか受け入れない自動接続機能を使用している場合は、このオプションを使用しないでください。
SQLCHECK=SEMANTICS
の場合、Oracleに接続し、データ・ディクショナリにアクセスして、プリコンパイラに必要な情報を取得させるには、USERIDも指定する必要があります。
6.7.71 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の場合、データが失われることがあります。
6.7.72 VARCHAR
用途
Pro*COBOLの場合のみ、VARCHAR
オプションは、「概要」で説明されているCOBOLグループ項目をVARCHAR
データ型として扱うようにプリコンパイラに指示します。
構文
VARCHAR={YES|NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
VARCHAR=YES
と指定した場合、「概要」で説明した暗黙的なグループ項目を、長さフィールドおよび文字列フィールドを持つOracle VARCHAR外部データ型として受け入れます。
VARCHAR=NO
の場合、Pro*COBOLプリコンパイラでは、暗黙的なグループ項目はVARCHAR
外部データ型としては受け入れられません。
6.7.73 VERSION
用途
EXEC SQL OBJECT DEREF文によって戻されるオブジェクトのバージョンを指定します。
構文
VERSION={RECENT | LATEST | ANY}
デフォルト値
RECENT
使用上の注意
EXEC ORACLE OPTION文を使用してインラインで入力できます。
RECENTは、現行のトランザクションでオブジェクトが選択されてオブジェクト・キャッシュに入っている場合、そのオブジェクトが戻されることを意味します。シリアライズ可能モードで実行中のトランザクションの場合、このオプションの効果はLATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。ほとんどのアプリケーションには、RECENTが適切です。
LATESTは、オブジェクトがオブジェクト・キャッシュに存在しない場合、データベースから取得されることを意味します。オブジェクト・キャッシュに存在する場合は、サーバーからリフレッシュされます。LATESTを使用する場合、ネットワークのラウンドトリップ数が最大になるため注意してください。LATESTは、オブジェクト・キャッシュとサーバーのバッファ・キャッシュをできるかぎり一致させる必要がある場合にのみ使用してください。
ANYは、オブジェクトがすでにオブジェクト・キャッシュに存在している場合、そのオブジェクトが戻されることを意味します。キャッシュになければ、そのオブジェクトはサーバーから取得します。ANYを指定すると、ネットワークのラウンドトリップ数は最小になります。この値を使用するのは、アプリケーションが読取り専用オブジェクトにアクセスする場合や、ユーザーがオブジェクトに排他的にアクセスする場合です。
6.8 条件付きプリコンパイル
条件付きプリコンパイルでは、特定の条件に基づいて、ホスト・プログラム内のコード・セクションの組込み(または除外)を行います。たとえば、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では改行記号で終了する必要があります。
6.8.1 例
次の例では、シンボル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の間に記述し、シンボルを定義しないことで、そのコードをコメント行にすることができます。
6.9 分割プリコンパイル
Oracleプリコンパイルを使用すると、複数のホスト・プログラム・モジュールを別々にプリコンパイルし、それらをリンクして1つの実行可能プログラムを作成できます。これにより、プログラムの機能コンポーネントの作成とデバッグを複数のプログラマが分担して行う場合に必要とされる、モジュラー・プログラミングが可能になります。個々のプログラム・モジュールを同じ言語で記述する必要はありません。
6.9.1 ガイドライン
次のガイドラインは、いくつかの一般的な問題を回避するのに役立ちます。
カーソルの参照
カーソル名はSQL識別子であり、その有効範囲はプリコンパイル・ユニットです。このため、カーソルの動作が複数のプリコンパイル・ユニット(ファイル)にまたがることはありません。つまり、あるファイルで宣言したカーソルを、別のファイルからオープンまたはフェッチできません。したがって、分割プリコンパイルを実行するときは、指定のカーソルに対する定義と参照がすべて1つのファイルに記述されているか確認してください。
MAXOPENCURSORSの指定
Oracleに接続するプログラム・モジュールをプリコンパイルするときは、MAXOPENCURSORSに、どのプログラム・モジュールについても十分な大きさの値を指定してください。指定したMAXOPENCURSORSの値は、別のプログラム・モジュールに使用すると無視されます。実行時には、接続に有効な値のみが使用されます。
単一のSQLCAの使用
使用するSQLCAが1つのみの場合は、1つのプログラム・モジュールでそのSQLCAをグローバルに宣言する必要があります。
6.9.2 制限事項
1つの明示カーソルの参照はすべて、同じプログラム・ファイル内にあることが必要です。別のモジュールでDECLAREされたカーソルの操作はできません。カーソルの詳細は、「埋込みSQLの使用方法」 を参照してください。
6.10 コンパイルおよびリンク
実行可能プログラムを作成するには、プリコンパイラによって生成されたソース・ファイルをコンパイルし、その結果得られるオブジェクト・モジュールを、SQLLIBおよびシステム固有のOracleライブラリ内の必要なモジュールとリンクさせる必要があります。また、OCIコールを埋め込む場合も、必ずOCIランタイム・ライブラリ(OCILIB)にリンクしてください。
リンカーはオブジェクト・モジュール内のシンボリック参照を解決します。これらの参照で競合が発生すると、リンクは失敗します。プリコンパイル済のプログラムにサード・パーティのソフトウェアをリンクしようとするときに、このような競合が発生する可能性があります。こうした問題が生じるのは、サード・パーティのソフトウェアの中にはOracleと互換性のないものがあるためです。Oracleカスタマ・サービスに問い合せて、使用するソフトウェアがサポートされているかどうかを確認してください。
コンパイルおよびリンクの方法はシステムによって異なります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。
OCIハンドルおよび記述子の属性の詳細は、「ハンドルおよび記述子の属性」を参照してください。
6.10.1 システム依存
コンパイルおよびリンクの方法はシステムによって異なります。たとえば、システムによっては、ホスト言語プログラムをコンパイルするときにコンパイラの最適化をオフにする必要があります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。