この章では、Pro*C/C++プリコンパイラの実行方法とプリコンパイラ・オプションの拡張セットについて詳しく説明します。この章の項目は、次のとおりです。
プリコンパイラの位置はシステムによって異なります。システム管理者またはデータベース管理者は、通常は論理名またはエイリアスを指定するか、その他のシステム固有の手段を使用して、Pro*C/C++実行ファイルをアクセス可能にします。
Pro*C/C++プリコンパイラを実行するには、次のコマンドを入力します。
proc option=value...
注意: オプション値は必ずオプション名に続く等号(前後のスペースなし)の後に指定します。 |
たとえば次のコマンドを入力するとします。
proc INAME=test_proc
カレント・ディレクトリのファイルtest_proc.pc
がプリコンパイルされます。これは、プリコンパイラではファイル名の拡張子が.pc
とみなされるためです。INAME=引数は、プリコンパイルされるソース・ファイルを指定します。INAMEオプションはコマンドラインの最初のオプションでなくてもかまいませんが、最初にくる場合はオプション指定を省略できます。したがって、次のコマンド
proc myfile
は、次のオプションに相当します。
proc INAME=myfile
注意: 特定のOSオブジェクト(たとえばファイル名)の名前を指定しないオプション名とオプション値には、大/小文字区別はありません。このマニュアル中の例では、オプション名は大文字で記述し、オプション値は通常は小文字で記述しています。Pro*C/C++プリコンパイラ実行ファイル自体も含めてファイル名を入力するときには、大/小文字区別に関してオペレーティング・システムの表記規則に従ってください。UNIXなど一部のプラットフォームでは、値の文字列の前に特定のエスケープ文字が必要です。プラットフォーム固有のマニュアルを参照してください。 |
各オプションを使用すると、リソースの使用方法、エラーのレポート方法、入出力のフォーマット方法およびカーソルの管理方法を制御できます。
オプションの値はリテラルです。これらの値はテキスト値または数値です。たとえば次のオプションがあるとします。
... INAME=my_test
ここで、値はファイル名を表す文字列リテラルです。
次にMAXOPENCURSORSオプションの例を示します。
...MAXOPENCURSORS=20
ここで、値は数値です。
一部のオプションはブール値をとり、文字列yesまたはno、trueまたはfalse、あるいは整数リテラル1または0で表すことができます。たとえば、次のオプション
... SELECT_ERROR=yes
は、次のオプションに相当します。
... SELECT_ERROR=true
または次のオプションに相当します。
... SELECT_ERROR=1
これらはすべて、実行時にSELECTエラーが検出されることを意味しています。
SYS_INCLUDEプリコンパイラ・オプションおよびINCLUDEプリコンパイラ・オプションでは、環境変数を使用できます。PROCアプリケーションをプリコンパイルするときは、SYS_INCLUDEディレクトリ・パスおよびINCLUDEディレクトリ・パスでORACLE_HOME
などの環境変数を使用できます。また、CONFIGファイルpcscfg.cfg
のSYS_INCLUDEオプション値およびINCLUDEオプション値を使用することもできます。環境変数の次の使用方法がサポートされています。
Linuxの場合
$ENV_VAR sys_include=$ORACLE_HOME/precomp/public include=$ORACLE_HOME/precomp/public $(ENV_VAR) sys_include=$(ORACLE_HOME)/precomp/public include=$(ORACLE_HOME)/precomp/public ${ENV_VAR} sys_include=${ORACLE_HOME}/precomp/public include=${ORACLE_HOME}/precomp/public
Windowsの場合
%ENV_VAR% sys_include=%ORACLE_HOME%\precomp\public include=%ORACLE_HOME%\precomp\public
構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイル内の各レコード(行)には、オプション1つと、それに対応付けられた1つ以上の値が含まれます。1行に複数のオプションを入力すると、2番目以降のオプションは無視されます。たとえば、次の構成ファイルに次の行が含まれる場合があります。
FIPS=YES MODE=ANSI CODE=ANSI_C
これらの行は、FIPS、MODEおよびCODEオプションにデフォルト値を設定します。
pcscfg.cfg
では、各エントリの1行当たりの文字数は最大300文字に制限されています。SYS_INCLUDEパスなど、この値を300文字より長く設定するには、エントリを複数行で作成します。次に例を示します。
sys_include=/ade/aime_rdbms_9819/oracle/precomp/public sys_include=/usr/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include sys_include=/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include sys_include=/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include sys_include=/usr/include
行末にはカッコを使用しないでください。行末にカッコを使用すると、前の行がすべて無効になります。たとえば、次のように3行目の行末にカッコがあると、次のエントリは、
sys_include=/ade/aime_rdbms_9819/oracle/precomp/public sys_include=/usr/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include sys_include=/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include) sys_include=/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include sys_include=/usr/include
SYS_INCLUDEが次のように設定されます。
/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include, /usr/lib/gcc-lib/i386-redhat-linux7/2.96/include,/usr/include
インストールごとにシステム構成ファイルが1つあります。システム構成ファイルの名前はpcscfg.cfg
です。このファイルの位置はシステムに依存します。
注意: pcscfg.cfg ファイルでは、空白を使用できません。たとえば、次のファイルに次の行が含まれるとします。
プリコンパイルは失敗します。次の行に置き換えることができます。
|
Pro*C/C++のユーザーはそれぞれ、1つ以上のプライベート構成ファイルを持つことができます。構成ファイルの名前は、必ずCONFIG=プリコンパイラ・オプションを使用して指定してください。
注意: 構成ファイルはネストできません。つまり、構成ファイル内では、CONFIG=は有効ではありません。 |
オプションの値は、優先順位の低いものから順に、次のように決定されます。
たとえば、MAXOPENCURSORSオプションでは、キャッシュ内のオープン・カーソルの最大数を指定します。このオプションのプリコンパイラに組み込まれたデフォルト値は10です。ただし、システム構成ファイルでMAXOPENCURSORS=32を指定すると、デフォルトは32になります。ユーザー構成ファイルでは、これをさらに別の値に設定できます。これはシステム構成ファイルの値より優先されます。最終的には、インライン指定が前述のすべてのデフォルト値よりも優先されます。
PROCコマンドライン・オプションが複数回使用されている場合、PROCでは、最後に使用されているPROCコマンドライン・オプションに割り当てられている最後の値をプリコンパイルに使用します。次に例を示します。
$ proc iname=sample.pc ... oname=output1.c ... oname=output2.c ... oname=output3.c
この例では、output3.c
はPROCが使用するONAME値であり、生成される出力ファイル名はoutput3.c
です。
CONFIGファイル(システム・デフォルトまたはユーザー定義)とコマンドラインの両方にオプションが指定されている場合は、コマンドラインで指定されている値が優先されます。
SYS_INCLUDEオプションおよびINCLUDEオプションの場合、動作は環境変数で定義されます。行末にはカッコで中断されない限り、値は追加されます。
プライベート構成ファイルをCONFIG=filenameで指定する場合、最初の値が優先され、コマンドラインの後続の値は無視されます。この場合は、例外的にコマンドラインの最後の値が優先されません。
USERIDなどの一部のオプションには、プリコンパイラ・デフォルト値がありません。オプションで組込みデフォルト値のあるものについては、表10-2を参照してください。
注意: プリコンパイラのデフォルト値については、システム固有のマニュアルを参照してください。プラットフォーム上では、この章で示された値から変更されている可能性もあります。 |
コマンドラインで疑問符(?)を使用すると、1つ以上のオプションの現在の設定値を対話形式で調べることができます。たとえば次のコマンドを発行するとします。
proc ?
この場合、すべてのオプションが、現在の設定値とともに端末に出力(表示)されます。(UNIXシステムでCシェルを使用しているときには「?」をバックスラッシュでエスケープしてください。)この場合、値はプリコンパイラに組み込まれているもので、システム構成ファイルの値によって上書きされています。ただし、次のコマンド
proc config=my_config_file.h ?
を入力したときに、カレント・ディレクトリにmy_config_file.h
というファイルがあると、すべてのオプションがリスト形式で表示されます。ユーザー構成ファイルの値によって、不足している値が補われ、Pro*C/Cプリコンパイラに組み込まれている値またはシステム構成ファイルに指定されている値が置き換えられます。
オプション名を指定し、その後ろに=?を付けるだけで、どれか1つのオプションの現在の設定値を調べることもできます。次に例を示します。
proc maxopencursors=?
このように入力すると、MAXOPENCURSORSオプションの現在のデフォルト値が出力されます。
次のように入力するとします。
proc
すると、「プリコンパイラのオプション」のような短いサマリーが表示されます。
MODEオプションは複数のオプションを同時に制御します。MODEはマクロ・オプションとも呼ばれます。CLOSE_ON_COMMIT、DYNAMICおよびTYPE_CODEなどのより新しいオプションは1つの関数のみを制御し、マイクロ・オプションとして知られています。マクロ・オプションは、高い優先順位が付けられている場合にのみ、マイクロ・オプションより優先されます。「オプション値の優先順位」を参照してください。
次の表は、マクロ・オプション値によって設定されるマイクロ・オプションの値を示しています。
表10-1 マクロ・オプション値によりマイクロ・オプション値が設定される方法
マクロ・オプション | マイクロ・オプション |
---|---|
MODE=ANSI | ISO |
CLOSE_ON_COMMIT=YES DYNAMIC=ANSI TYPE_CODE=ANSI |
MODE=ORACLE |
CLOSE_ON_COMMIT=NO DYNAMIC=ORACLE TYPE_CODE=ORACLE |
ユーザー構成ファイルでMODE=ANSIとCLOSE_ON_COMMIT=NOの両方を指定すると、COMMITしてもカーソルはクローズしません。構成ファイルでMODE=ORACLEを指定し、コマンドラインでCLOSE_ON_COMMIT=YESを指定すると、カーソルはクローズします。
プリコンパイル時に、ホスト・プログラムに埋め込まれているSQL文は、Pro*C/C++が生成するCまたはC++のコードに置換されます。生成されたコードには、データ型、データ長、ホスト変数のアドレスを示すデータ構造や、ランタイム・ライブラリであるSQLLIBに必要なその他の情報も含まれています。またこのコードには、埋込みSQLの処理を実行するSQLLIBルーチンのコールも入っています。
注意: プリコンパイラでは、Oracle Call Interface(OCI)ルーチンのコールは生成されません。 |
表10-2は主なプリコンパイラ・オプションのクイック・リファレンスです。受入れ可能でも効力を持たないオプションは、この表には記載されていません。
プリコンパイル・ユニットは、Cコードと1つ以上の埋込みSQL文を含むファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのプリコンパイル・ユニットにのみ効力を持ちます。たとえば、ユニットAに対してHOLD_CURSOR=YESおよびRELEASE_CURSOR=YESを指定し、ユニットBには指定しなければ、ユニットAのSQL文はこれらのHOLD_CURSOR値およびRELEASE_CURSOR値を使用して実行されますが、ユニットBのSQL文はデフォルト値を使用して実行されます。
表10-2は、Pro*C/C++オプションのクイック・リファレンスです。アスタリスクでマークされたオプションはインラインで入力できます。
表10-2 プリコンパイラのオプション
構文 | デフォルト値 | 指定 |
---|---|---|
AUTO_CONNECT={YES | NO} |
NO |
最初の実行文の前の自動CLUSTER$アカウント接続。 |
CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF} * |
CHARZ |
文字配列および文字列のマッピング。 |
CINCR |
1 |
現在の物理接続数がCMAX値より少ない場合、データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。 |
CLOSE_ON_COMMIT={YES | NO} |
NO |
COMMIT時にすべてのカーソルをクローズします。 |
CODE={ANSI_C | KR_C | CPP} |
KR_C |
生成されるCコードの種類。 |
COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE} |
MULTI_BYTE |
C/C++コンパイラがサポートするキャラクタ・セットの型。 |
CONFIG=filename |
なし |
ユーザーのプライベート構成ファイル。 |
CMIN |
2 |
接続プール内の最小物理接続数を指定します。 |
CMAX |
100 |
データベースに対してオープン可能な最大物理接続数を指定します。 |
CNOWAIT |
0(未設定)。 |
この属性は、プール内の物理接続がすべて使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。 |
CPOOL |
NO |
このオプションに基づいて、プリコンパイラは、SQLLIBに対して接続プーリング機能を使用可能または使用禁止にするように指示する適切なコードを生成します。 |
CPP_SUFFIX=extension |
なし |
出力ファイルのデフォルトのファイルの拡張子を指定します。 |
CTIMEOUT |
0(未設定)。 |
指定された期間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続数を最適に保ちます。 |
DBMS={V7 | NATIVE | V8} |
NATIVE |
互換性(Oracle7、Oracle8、Oracle8i、Oracle9iまたはプリコンパイル時に接続されていたデータベースのバージョン)。 |
DEF_SQLCODE={YES | NO} |
NO |
#define SQLCODEに対するマクロを生成します。 |
DEFINE=name * |
なし |
Pro*C/C++プリコンパイラで使用する名前を定義します。 |
DURATION={TRANSACTION | SESSION} |
TRANSACTION |
キャッシュ内のオブジェクトの確保継続時間を設定します。 |
DYNAMIC={ANSI | ORACLE} |
ORACLE |
OracleまたはANSI SQLの意味を指定します。 |
ERRORS={YES | NO} |
YES |
エラー・メッセージの送り先(NOを指定すると、リスト・ファイルにのみ送られ、端末には送られません)。 |
ERRTYPE=filename |
なし |
intypeファイル・エラー・メッセージのリスト・ファイル名。 |
FIPS={NO | SQL89 | SQL2 | YES} * |
なし |
ANSI/ISO非準拠を切り替えるかどうか。 |
HEADER=extension |
なし |
プリコンパイルされたヘッダー・ファイルのファイル拡張子。 |
HOLD_CURSOR={YES | NO} * |
NO |
カーソル・キャッシュがSQL文を処理する方法。 |
INAME=]filename |
なし |
入力ファイルの名前。 |
INCLUDE=pathname * |
なし |
EXEC SQL INCLUDE文または#include文のディレクトリ・パス。 |
INTYPE=filename |
なし |
型情報の入力ファイル名。 |
LINES={YES | NO} |
NO |
#lineディレクティブを生成するかどうか。 |
LNAME=filename |
なし |
リスト・ファイルの名前。 |
LTYPE={NONE | SHORT | LONG} |
なし |
生成するリスト・ファイルの型(生成する場合)。 |
MAXLITERAL=10..1024 |
1024 |
生成されるCコードの文字列リテラルの最大長(バイト)。 |
MAXOPENCURSORS=5〜255 * |
10 |
同時にキャッシュされるオープン・カーソルの最大数。 |
MODE={ANSI | ISO | ORACLE} |
ORACLE |
ANSI/ISOまたはOracleの動作。 |
NATIVE_TYPES |
NO |
ネイティブfloatおよびdoubleのサポート。 |
NLS_CHAR=(var1,..., varn) |
なし |
マルチバイトの文字変数を指定します。 |
NLS_LOCAL={YES | NO} |
NO |
マルチバイト文字の意味を制御します。 |
OBJECTS={YES | NO} |
YES |
オブジェクト型をサポートします。 |
ONAME=]filename |
iname.c |
出力(コード)ファイルの名前。 |
ORACA={YES | NO} * |
NO |
ORACAを使用するかどうか。 |
PAGELEN=30..256 |
80 |
リスト・ファイルのページ長。 |
PARSE={NONE | PARTIAL | FULL} |
FULL |
Pro*C/C++で(Cパーサーで).pcソース・コードが解析されるかどうか。 |
PREFETCH=0..65535 |
1 |
任意の行数を事前に取得して問合せの実行速度を向上させます。 |
RELEASE_CURSOR={YES | NO} * |
NO |
カーソル・キャッシュからのカーソルの解放を制御します。 |
SELECT_ERROR={YES | NO} * |
YES |
SELECTエラーのフラグ付け。 |
SQLCHECK={SEMANTICS | SYNTAX} * |
SYNTAX |
プリコンパイル時のSQLチェック量。 |
SYS_INCLUDE=pathname |
なし |
iostream.hなどのシステム・ヘッダー・ファイルがあるディレクトリ。 |
THREADS={YES | NO} |
NO |
マルチスレッド・アプリケーションを指定します。 |
TYPE_CODE={ORACLE | ANSI} |
ORACLE |
動的SQLのOracleまたはANSI型コードの使用方法。 |
UNSAFE_NULL={YES | NO} |
NO |
UNSAFE_NULL=YESと指定するとORA-01405メッセージが使用されなくなります。 |
USERID=username/password[@dbname] |
なし |
username/password[@dbname]接続文字列 |
UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET} |
NCHAR_CHARSET |
UNICODE(UTF16)で使用されるキャラクタ・セットの書式を指定します。 |
VARCHAR={YES | NO} |
NO |
暗黙的VARCHAR構造体の使用を許可するかどうか。 |
VERSION={ANY | LATEST | RECENT} * |
RECENT |
どのバージョンのオブジェクトを戻すか。 |
どのプリコンパイラ・オプションも、コマンドラインに入力できます。また、その多くは、EXEC ORACLE OPTION文を使用してプリコンパイラ・プログラムのソース・ファイルにインライン入力できます。
プリコンパイラ・オプションをコマンドラインに入力するには、次の構文を使用します。
... [OPTION_NAME=value] [OPTION_NAME=value] ...
それぞれのオプション=値の指定は、1つ以上の空白で区切ります。たとえば、次のように入力します。
... CODE=ANSI_C MODE=ANSI
次の構文を使用してEXEC ORACLE文を記述すると、オプションをインライン入力できます。
EXEC ORACLE OPTION (OPTION_NAME=value);
たとえば、次のように記述します。
EXEC ORACLE OPTION (RELEASE_CURSOR=yes);
EXEC ORACLE機能は、プリコンパイル中にオプション値を変更する場合に特に便利です。たとえば、HOLD_CURSORとRELEASE_CURSORを1文単位で変更する場合があります。
また、コマンドラインで入力できる文字数が、使用しているオペレーティング・システムで制限されているときは、オプションをインラインまたは構成ファイルで指定すると便利です。
EXEC ORACLE文は、同一オプションを指定した別のEXEC ORACLE文によってオプション指定値(テキスト)が変更されるまで有効です。次の例では、HOLD_CURSOR=NOはHOLD_CURSOR=YESが指定されるまで有効です。
char emp_name[20]; int emp_number, dept_number; float salary; EXEC SQL WHENEVER NOT FOUND DO break; EXEC ORACLE OPTION (HOLD_CURSOR=NO); EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT empno, deptno FROM emp; EXEC SQL OPEN emp_cursor; printf( "Employee Number Department\n--------------------------\n"); for (;;) { EXEC SQL FETCH emp_cursor INTO :emp_number, :dept_number; printf("%d\t%d\n", emp_number, dept_number); } EXEC SQL WHENEVER NOT FOUND CONTINUE; for (;;) { printf("Employee number: "); scanf("%d", &emp_number); if (emp_number == 0) break; EXEC ORACLE OPTION (HOLD_CURSOR=YES); EXEC SQL SELECT ename, sal INTO :emp_name, :salary FROM emp WHERE empno = :emp_number; printf("Salary for %s is %6.2f.\n", emp_name, salary);
この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。プリコンパイラ・オプションはアルファベット順に記載されています。また、オプション別にその用途、構文およびデフォルト値も示してあります。さらに「使用上の注意」の欄で、オプションの働きを説明します。
CLUSTER$アカウントへの自動接続を可能にします。
構文
AUTO_CONNECT={YES | NO}
デフォルト値
NO
使用上の注意
入力できるのは、コマンドラインまたは構成ファイルからのみです。
AUTO_CONNECT=YESで、最初の実行SQL文を処理するときにアプリケーションがまだデータベースに接続されていない場合、次のユーザーIDを使用して接続が試行されます。
CLUSTER$username
usernameは現行のオペレーティング・システムのユーザー名またはタスク名、CLUSTER$usernameは有効なOracleユーザーIDです。
AUTO_CONNECT=NOの場合、Oracleに接続するにはプログラムでCONNECT文を使用する必要があります。
用途
char型またはchar[n]配列型のCホスト変数およびそれらへのポインタのSQLへのデフォルトのマッピングを指定します。
構文
CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF}
デフォルト値
CHARZ
使用上の注意
リリース8.0より前のリリースでは、SQL DECLARE文を使用してCHARなどのcharまたはchar[n]ホスト変数を宣言する必要がありました。外部データ型VARCHAR2およびCHARZが、Oracle7のデフォルト文字マッピングでした。
関連項目
|
データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。
構文
CINCR = 1〜(CMAX-CMIN)。
デフォルト値
1
使用上の注意
最初は、CMINにより指定された物理接続数がすべてサーバーに対してオープンされます。その後、必要な場合にのみ物理接続がオープンされます。パフォーマンスを最適にするには、CMINを、アプリケーションによる実行が計画または想定される同時実行文の合計数に設定する必要があります。デフォルト値は2です。
用途
WITH HOLD句を指定しないで宣言されたすべてのカーソールをコミット時にクローズするかどうかを指定します。
構文
CLOSE_ON_COMMIT={YES | NO}
デフォルト値
NO
使用上の注意
入力できるのは、コマンドラインまたは構成ファイルからのみです。
このオプションは、カーソルがDECLARE CURSOR文でWITH HOLD句を使用してコードされていない場合にのみ有効です。これは、MODEオプションで関連付けられている新しいオプションと既存の動作の両方が上書きれるためです。MODEがCLOSE_ON_COMMITよりも高いレベルに指定されている場合は、MODEが優先されます。たとえば、デフォルトではMODE=ORACLEおよびCLOSE_ON_COMMIT=NOと設定されています。ユーザーがコマンドラインでMODE=ANSIと指定する場合、コミット時にWITH HOLD句を使用していないすべてのカーソルがクローズされます。
CLOSE_ON_COMMIT=NO(MODE=ORACLEのとき)の場合、COMMITまたはROLLBACKを発行すると、FOR UPDATE句を使用して宣言されるカーソル、またはCURRENT OF句内で参照されるカーソルのみが宣言されます。COMMITまたはROLLBACK文の影響を受けない他のカーソルは、すでにオープンされている場合は、オープンのままです。ただし、CLOSE_ON_COMMIT=YES(MODE=ANSIのとき)場合は、COMMITまたはROLLBACKを発行すると、すべての明示カーソルがクローズされます。
データベースに対してオープン可能な最大物理接続数を指定します。
構文
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++互換コードを生成します。
SELECT、INSERT、DELETEおよびUPDATEのSQL99構文と、DECLARE CURSOR文のカーソル本体がサポートされるように指定します。
構文
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がシングルバイト・キャラクタ・セットに設定されていると、このオプションは効力を持ちません。
ユーザー構成ファイルの名前を指定します。
構文
CONFIG=filename
デフォルト値
なし
使用上の注意
入力できるのは、コマンドラインのみです。
ユーザー構成ファイルの名前および位置をPro*C/C++に通知する方法は、このオプション以外にありません。
このオプションに基づいて、プリコンパイラは、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がOracle9i、Oracle8i、Oracle8、Oracle7、あるいはOracleのネイティブ・バージョン(つまり、アプリケーションが接続しているバージョン)のうち、どの意味上および構文上の規則に従うかを指定します。
構文
デフォルト値
NATIVE
使用上の注意
入力できるのは、コマンドラインまたは構成ファイルからのみです。
DBMSオプションの指定によりOracleのバージョンに固有の動作を制御できます。DBMS=NATIVE(デフォルト値)のとき、Oracleはアプリケーションが接続しているデータベース・バージョンの意味上および構文上の規則に従います。
DBMS=V8またはDBMS=V7のときは、OracleはそれぞれOracle9iの規則(Oracle7、Oracle8およびOracle8iの場合と同じ規則)に従います。
OracleではV6_CHARはサポートされておらず、この機能はCHAR_MAPプリコンパイラ・オプションに用意されています。
状況 | DBMS=V7 | V8MODE=ANSI | DBMS=V7 | V8MODE=ORACLE |
---|---|---|
「データが見つかりません」という警告コード |
+100 |
+1403 |
標識変数を使用しないNULLのフェッチ |
エラー-01405 |
エラー-01405 |
標識変数を使用しない切捨て値のフェッチ |
エラーはなし。sqlwarn[1]が設定されます。 |
エラーはなし。sqlwarn[1]が設定されます。 |
COMMITまたはROLLBACKによるカーソルのクローズ |
すべて明示的に実行されます。 |
CURRENT OFのみ |
すでにオープンしているカーソルのオープン |
エラー-02117 |
エラーにならない |
すでにクローズしているカーソルのクローズ |
エラー-02114 |
エラーにならない |
SQLグループ関数によるNULLの無視 |
警告なし |
警告なし |
複数行の問合せでSQLグループ関数をコールするタイミング |
FETCH時 |
FETCH時 |
SQLCA構造体の宣言 |
オプション |
必須 |
SQLCODEまたはSQLSTATE状態変数の宣言 |
必須 |
指定できるがOracleは無視 |
整合性制約 |
有効 |
有効 |
ロールバック・セグメント用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を組み込まなければ、このオプションを使用するとプリコンパイル時にエラーが発生します。
#ifdefおよび#ifndef Pro*C/C++プリコンパイラ・ディレクティブで使用できる名称を定義します。定義された名称はEXEC ORACLE IFDEFとEXEC ORACLE IFNDEF文でも使用できます。
構文
DEFINE=name
デフォルト値
なし
使用上の注意
コマンドラインまたはインラインで入力できます。DEFINEでは名称しか定義できません。マクロは定義できません。たとえば、次のような定義は無効です。
proc my_prog DEFINE=LEN=20
DEFINE文を正しく使用すれば、次のような指定ができます。
proc my_prog DEFINE=XYZZY
するとmy_prog.pcに次のコードを記述できるようになります。
#ifdef XYZZY ... #else ... #endif
または、単純にコーディングできます。
EXEC ORACLE IFDEF XYZZY; ... EXEC ORACLE ELSE; ... EXEC ORACLE ENDIF;
次の例は無効です。
#define XYZZY ... EXEC ORACLE IFDEF XYZZY ... EXEC ORACLE ENDIF;
EXEC ORACLE DEFINEまたはDEFINEオプションでマクロが定義されているときにかぎり、EXEC ORACLE条件文が有効となります。
DEFINE=を使用して名前を定義してから、Pro*C/C++プリコンパイラの#ifdef(または#ifndef)ディレクティブを使用して条件を含めた(または除外した)場合は、Cコンパイラを実行するときにその名前が定義されていることを確認します。たとえば、UNIXのcc
では、-Dオプションを使用してCコンパイラの名前を定義する必要があります。
用途
後続の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文を使用してインライン入力できません。
DYNAMICオプション設定については、表14-2を参照してください。
エラー・メッセージを端末とリスト・ファイルの両方に送信(YES)するか、リスト・ファイルにのみ送信(NO)するかを指定します。
構文
ERRORS={YES | NO}
デフォルト値
YES
使用上の注意
入力できるのは、コマンドラインまたは構成ファイルからのみです。
型ファイルの処理時に生成されたエラーを書き込む出力ファイルを指定します。このオプションを省略すると、エラーは画面に出力されます。「INTYPE」も参照してください。
構文
ERRTYPE=filename
デフォルト値
なし
使用上の注意
エラー・ファイルが1つのみ生成されます。複数の値を入力すると、最後の値がプリコンパイラに使用されます。
アプリケーションが通知の登録および受信に対応しているかどうかを指定します。
構文
EVENTS={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインからのみ入力できます。
ANSI SQLの拡張機能に(FIPSフラガーで)フラグを立てるかどうかを指定します。拡張機能とは、ANSIの形式または構文規則(権限適用規則は除く)に違反するSQL要素を指します。
構文
FIPS={SQL89 | SQL2 | YES | NO}
デフォルト値
なし
使用上の注意
インラインまたはコマンドラインで入力できます。
FIPS=YESのとき、FIPSフラガーは使用可能になります。このときANSI SQLのOracle拡張機能または非準拠の方法でANSI SQL機能を使用すると、(エラーではなく)警告メッセージが発行されます。プリコンパイル時にフラグ付けされるANSI SQL拡張機能には次のものがあります。
FOR句を含む配列インタフェース
SQLCA、ORACAおよびSQLDAデータ構造体
DESCRIBE文を含む動的SQL
埋込みPL/SQLブロック
自動データ型変換
DATE、NUMBER、RAW、LONGRAW、VARRAW、ROWID、VARCHAR2およびVARCHARデータ型
ポインタ・ホスト変数
ランタイム・オプション指定用のOracle OPTION文
ユーザー・イグジットのTOOLS文
CONNECT文
TYPEおよびVARデータ型の同等文
AT db_name句
DECLARE...DATABASE文、...STATEMENT文および...TABLE文
WHENEVER文でのSQLWARNING条件
WHENEVER文におけるDO function_name()、DO BREAKアクションおよびDO CONTINUEアクション
COMMIT文でのCOMMENT句とFORCE TRANSACTION句
ROLLBACK文でのFORCE TRANSACTION句およびTO SAVEPOINT句
COMMIT文およびROLLBACK文でのRELEASEパラメータ
WHENEVER...GOTOラベルおよびINTO句のホスト変数の前に任意指定で付加するコロン
プリコンパイル済ヘッダー・ファイルを許可します。プリコンパイル済ヘッダー・ファイルのファイル拡張子を指定します。
構文
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 DML文を実行すると、その文に対応付けられたカーソルがカーソル・キャッシュ内のエントリにリンクされます。続いてカーソル・キャッシュ・エントリはOracleプライベートSQL領域にリンクされます。この領域にはSQL文の実行に必要な情報が格納されます。HOLD_CURSORではカーソルとカーソル・キャッシュの間のリンクで発生する処理を制御します。
HOLD_CURSOR=NOのとき、OracleがSQL文を実行してカーソルがクローズされた後に、プリコンパイラはそのリンクに再利用可能とマークします。このリンクは、それが示すカーソル・キャッシュ・エントリが別のSQL文に必要になると、すぐに再使用されます。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。
HOLD_CURSOR=YESのときは、リンクが保持されます。つまり、プリコンパイラではそのリンクが再利用されません。これは、以降の実行速度が改善されるため、頻繁に実行されるSQL文には役立ちます。文の再解析やOracleプライベートSQL領域用のメモリー割当ては不要です。
暗黙カーソル用としてインラインで使用するときは、SQL文の実行前にHOLD_CURSORを設定してください。明示カーソル用としてインラインで使用するときは、カーソルをクローズする前にHOLD_CURSORを設定してください。
RELEASE_CURSOR=YESはHOLD_CURSOR=YESをオーバーライドし、HOLD_CURSOR=NOはRELEASE_CURSOR=NOをオーバーライドします。この2つのオプションの相互作用方法を示す情報は、表C-1を参照してください。
新しいバッチ挿入の開始前に、暗黙的セーブポイントが設定されるかどうかを制御します。
構文
implicit_svpt={YES|NO}
デフォルト値
NO
使用上の注意
implict_svpt=yesの場合、行の新しいバッチの開始前に、セーブポイントが設定されます。挿入でエラーが発生した場合、暗黙的セーブポイントまでのロールバックが実行されます。このオプションは、DB2との互換性のために用意されていますが、余分なラウンドトリップとなるためマイナス面であることは明らかです。
implict_svpt=noの場合、暗黙的セーブポイントは設定されません。バッファ挿入でエラーが発生した場合、アプリケーションには報告されますが、ロールバックは実行されません。
入力ファイル名を指定します。
構文
INAME=path_and_filename
デフォルト値
なし
使用上の注意
入力できるのは、コマンドラインのみです。
すべての入力ファイル名はプリコンパイル時に一意である必要があります。
ファイル名拡張子が.pc
の場合は省略できます。入力ファイル名がコマンドラインの先頭オプションになっているときは、オプションのINAME=の部分を省略できます。次に例を示します。
proc sample1 MODE=ansi
この例では、ANSIモードを使用してファイルsample1.pc
をプリコンパイルします。このコマンドは次のコマンドに相当します。
proc INAME=sample1 MODE=ansi
注意: sqlctx ハッシュ値は、Pro*C/C++コマンドに渡されるINAME パラメータに基づいて生成されます。そのため、同じ名前の複数のファイルが、異なる関数を含む異なるディレクトリに格納されており、プログラムのプリコンパイルのためにビルド・スクリプトが物理ディレクトリに送られるようなアプリケーションでは、問題が発生する可能性があります。したがって、より高いレベルにMakeファイルを配置し、そのパス名を使用してファイルをプリコンパイルする必要はありません。 |
#includeまたはEXEC SQL INCLUDEディレクティブによって取り込まれるファイルのディレクトリ・パスを指定します。
構文
INCLUDE=pathnameまたはINCLUDE=(path_1,path_2,...,path_n)
デフォルト値
Pro*C/C++にインクルードするカレント・ディレクトリおよびパス
使用上の注意
インラインまたはコマンドラインで入力できます。
INCLUDEは、インクルードされたファイルに対するディレクトリ・パスを指定するために使用します。プリコンパイラでは、次の順序でディレクトリが検索されます。
カレント・ディレクトリ
SYS_INCLUDEプリコンパイラ・オプションに指定されているシステム・ディレクトリ
INCLUDEオプションで指定された入力順のディレクトリ
標準ヘッダー・ファイル用の組込みディレクトリ
通常、Oracle固有のヘッダー・ファイルsqlca.h
やsqlda.h
などのディレクトリ・パスを指定する必要はありません。
注意: インクルードするファイルにOracle固有のファイル名を拡張子なしで指定すると、Pro*C/C++は拡張子.h とみなします。このため、インクルード・ファイルには、.h ではないにせよ、拡張子を付ける必要があります。 |
他のすべてのヘッダー・ファイルに対しては、プリコンパイラは拡張子.h
を想定しません。
非標準ファイルの場合は、カレント・ディレクトリに格納されていないかぎり、INCLUDEを使用してディレクトリ・パスを指定する必要があります。次に示すように、コマンドラインに複数のパスを指定できます。
... INCLUDE=path_1 INCLUDE=path_2 ...
注意: インクルードするファイルが別ディレクトリに存在している場合には、カレント・ディレクトリには同じ名前のファイルがないことを確認してください。 |
INCLUDEオプションを使用してディレクトリ・パスを指定する構文は、システムによって異なります。各オペレーティング・システムの規則に従ってください。
注意: INCLUDEオプションの場合、オプション値の優先順位が逆になります。値が上書きされる他のオプションとは異なり、INCLUDEは次の場所で指定されたすべてのディレクトリ・ファイルを追加します。
ただし、カッコ内またはカッコなしでの値の渡し方には違いがあります。カッコ内で単一の値またはディレクトリ・リストを渡す場合、INCLUDEの既存の値は上書きされます。リストをカッコなしの単純な値として渡す場合、既存の値に追加されます。 |
OTTに生成された型ファイルを1つ以上指定します(アプリケーションでオブジェクト型が使用される場合にのみ必要です)。
構文
INTYPE=(file_1,file_2,...,file_n)
デフォルト値
なし
使用上の注意
Pro*C/C++コードにはオブジェクト型1つにつき、1つの型ファイルが存在します。
Pro*C/C++プリコンパイラでその出力ファイルに#lineプリプロセッサ・ディレクティブが追加されるかどうかを指定します。
構文
LINES={YES | NO}
デフォルト値
NO
使用上の注意
入力できるのは、コマンドラインのみです。
LINESオプションはデバッグに便利です。
LINES=YESのとき、Pro*C/C++プリコンパイラは出力ファイルに#lineプリプロセッサ・ディレクティブを追加します。
通常、Cコンパイラではそれぞれの入力行が処理されるたびに行カウントを増やします。#lineディレクティブは、コンパイラの入力行カウンタを強制的にリセットして、プリコンパイラが生成したコードを数えないようにします。さらに、入力ファイルの名前が変わったときに、次の#lineディレクティブが新しいファイル名を指定します。
Cコンパイラは行番号およびファイル名を使用してエラーの発生位置を示します。したがって、Cコンパイラによって発行されたエラー・メッセージは、修正済(プリコンパイル済)のソース・ファイルではなく、元のソース・ファイルを常に参照します。これにより、ほとんどのデバッガを使用して元のソース・コードを順番に実行できます。
LINES=NO(デフォルト)のときは、プリコンパイラでは出力ファイルに#lineディレクティブは追加されません。
注意: Pro*C/C++プリコンパイラでは、#lineディレクティブはサポートされません。これは、プリコンパイラ・ソースでは#lineディレクティブを直接コーディングできないことを意味します。ただし、LINES=オプションを使用すると、プリコンパイラに#lineディレクティブを挿入させることができます。「無視されるディレクティブ」も参照してください。 |
リスト・ファイル名を指定します。
構文
LNAME=filename
デフォルト値
なし
使用上の注意
入力できるのは、コマンドラインのみです。
リスト・ファイルのデフォルトのファイル名の拡張子は.lis
です。
生成されるリスト・ファイルの型を指定します。
構文
LTYPE={NONE | SHORT | LONG}
デフォルト値
SHORT
使用上の注意
コマンドラインまたは構成ファイルで入力できます。
リスト・ファイル生成時のデフォルトの形式はLONGです。LTYPE=LONGのとき、すべてのソース・コードが解析順に出力されます。また、メッセージも生成順に出力されます。さらに、現在有効なPro*C/C++オプションが出力されます。
LTYPE=SHORTを指定すると、生成されたメッセージのみが出力され、ソース・コードは出力されません。ソース・ファイルへの参照行はメッセージ状態を生成したコードの位置を特定するのに役立ちます。
LTYPE=NONEのとき、LNAMEオプションでリスト・ファイル名を明示的に指定しないかぎり、リスト・ファイルは作成されません。後者の場合、リスト・ファイルはLTYPE=LONGを想定して作成されます。
INSERT文の実行前にバッファする必要のある行数を制御します。
構文
max_row_insert={0...1000}
デフォルト値
0
使用上の注意
ゼロより大きい数値によりバッファ挿入機能が有効になり、INSERT文の実行前にその数の行をバッファします。
プリコンパイラによって生成される文字列リテラルの最大長を指定します。これによってコンパイラの制限を超えないようにします。
構文
MAXLITERAL=integer(範囲は10〜1024)
デフォルト値
1024
使用上の注意
インラインでは入力できません。
MAXLITERALに指定できる最大値はコンパイラによって異なります。たとえば、Cコンパイラには513文字以上の文字列リテラルを扱えないものがあるため、そのような場合はMAXLITERAL=512と指定します。
MAXLITERALで指定した長さを超える文字列はプリコンパイル中に分割され、実行時に再び結合(連結)されます。
インラインでMAXLITERALを入力することはできますが、プログラムで値を設定できるのは1回のみで、EXEC ORACLE文を最初のEXEC SQL文の前に指定する必要があります。指定しない場合、Pro*C/C++は警告メッセージを発行し、余分または誤って指定したEXEC ORACLE文を無視して、処理を続行します。
プリコンパイラがキャッシュしたままにする同時オープン・カーソル数を指定します。
構文
MAXOPENCURSORS=integer
デフォルト値
10
使用上の注意
インラインまたはコマンドラインで入力できます。
MAXOPENCURSORSを使用すると、プログラムのパフォーマンスを改善できます。分割プリコンパイル時には、MAXOPENCURSORSを使用します。MAXOPENCURSORSオプションは、SQLLIBカーソル・キャッシュの初期サイズを指定します。
暗黙カーソルを使用する文が実行され、HOLD_CURSOR=NOのとき、あるいは明示カーソルがクローズされたときに、カーソル・エントリには再利用可能のマークが付けられます。この文が再度発行され、このカーソル・エントリが別の文で使用されていない場合は再利用されることになります。
新しいカーソルが必要で、割当て済カーソル数がMAXOPENCURSORSより少ない場合は、キャッシュ内の次のカーソルが割り当てられます。MAXOPENCCURSORSを超えると、Oracleではまず以前のエントリの再利用を試みます。空いているエントリがない場合、追加キャッシュ・エントリが割り当てられます。Oracleは、プログラムがメモリーを消費するか、データベース・パラメータのOPEN_CURSORSを超過するまで継続してこれを行います。
通常の処理で、HOLD_CURSOR=NOとRELEASE_CURSOR=NO(デフォルト)を使用する場合は、MAXOPENCURSORSをデータベース・パラメータのOPEN_CURSORSよりも少なくとも6以上小さい数に設定し、データ・ディクショナリで使用されるカーソルが文を処理できるようにすることをお薦めします。
プログラムの同時オープン・カーソル数を増す必要がある場合には、MAXOPENCURSORSを必要な数まで増やして再度指定することがあります。45〜50の値を指定することは珍しくありませんが、ユーザー・プロセスのメモリー領域にカーソル1つにつきもう1つのプライベートSQL領域が必要となります。デフォルト値の10は、大半のプログラムには適切な値です。
プログラムがOracleの動作規則に従うかどうか、あるいは現行のANSI/ISO SQL規格に準拠するかどうかを指定します。
構文
MODE={ANSI | ISO | ORACLE}
デフォルト値
ORACLE
使用上の注意
入力できるのは、コマンドラインまたは構成ファイルからのみです。
このオプションでは、ISOはANSIと同じ意味です。
MODE=ORACLE(デフォルト)のとき、埋込みSQLプログラムはOracleの動作規則に従います。たとえば、宣言部はオプションで、空白セルは削除されます。
MODE=ANSIのときは、プログラムは完全にANSI SQL規格に準拠します。この設定変更で次のように処理が変化します。
COMMITまたはROLLBACKを発行すると、明示カーソルがすべてクローズされます。
すでにオープンされているカーソルのOPENや、クローズされているカーソルのCLOSEはできません。(MODE=ORACLEのときは、再解析を避けるためにオープン状態のカーソルを再度OPENできます。)
各EXEC SQL文のスコープ内にSQLCODEという名前のlong変数またはcharのSQLSTATE[6]変数(どちらの変数も大文字にする必要があります)のいずれかを宣言する必要があります。すべての場合に同一のSQLCODEまたはSQLSTATE変数を使用する必要はありません。つまり、変数はグローバル変数でなくてもかまいません。
SQLCAの宣言はオプションです。SQLCAを挿入する必要はありません。
SQLCODEに戻される「データが見つかりません」というOracle警告コードは+1403から+100に変わります。メッセージ・テキストは変更されていません。
ネイティブ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={YES | NO}
デフォルト値
NO
使用上の注意
YESを指定すると、Pro*C/C++およびSQLLIBライブラリによってローカルのマルチバイト・サポートが提供されます。NLS_CHARオプションを使用して、マルチバイトのCホスト変数を指定する必要があります。
NOを指定すると、Pro*C/C++はデータベース・サーバーのマルチバイト・サポートを使用します。新規アプリケーションはすべてNLS_LOCALをNOに設定してください。
環境変数NLS_NCHARには、有効な固定幅各国語キャラクタ・セットを設定する必要があります。可変幅各国語キャラクタ・セットはサポートされていません。
入力できるのは、コマンドラインまたは構成ファイルからのみです。
出力ファイル名を指定します。出力ファイルは、プリコンパイラで生成されるCコードのファイルです。
構文
ONAME=path_and_filename
デフォルト値
.c拡張子付きのINAME
使用上の注意
入力できるのは、コマンドラインのみです。このオプションを使用すると、入力(.pc
)ファイルとは異なるパス名を使用して、出力ファイルのフルパス名を指定できます。たとえば、次のコマンドを発行する場合を考えます。
proc iname=my_test
デフォルト出力ファイル名はmy_test.c
です。出力ファイル名をmy_test_1.c
にする場合は、次のコマンドを発行します。
proc iname=my_test oname=my_test_1.c
ONAMEで指定するファイルにはデフォルトで拡張子が追加されないため、.c
を付加する必要があります。
注意: 出力ファイル名をデフォルトのまま使用するのではなく、ONAMEを使用して明示的に名前を付けることをお薦めします。拡張子なしでONAME値を指定すると、生成ファイルの名前に拡張子は付きません。 |
プログラムでOracle通信領域(ORACA)を使用できるかどうかを指定します。
構文
ORACA={YES | NO}
デフォルト値
NO
使用上の注意
インラインまたはコマンドラインで入力できます。
ORACA=YESのときは、プログラムにEXEC SQL INCLUDE ORACA文または#include oraca.h
文を記述する必要があります。
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(あるいはその両方)の場合、エラーが生成されます。
用途
リスト・ファイルの物理ページごとの行数を指定します。
構文
PAGELEN=integer
デフォルト値
80
使用上の注意
インラインでは入力できません。値の許容範囲は30〜256です。
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を使用すると、プログラムのパフォーマンスを改善できます。
SQL DML文を実行すると、その文に対応付けられたカーソルがカーソル・キャッシュ内のエントリにリンクされます。続いてカーソル・キャッシュ・エントリはOracleプライベートSQL領域にリンクされます。この領域にはSQL文の実行に必要な情報が格納されます。RELEASE_CURSORは、カーソル・キャッシュとプライベートSQL領域の間のリンクで発生する処理を制御します。
RELEASE_CURSOR=YESに指定すると、OracleがSQL文を実行し、カーソルがクローズされた後、プリコンパイラはこのリンクはただちに解除します。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。カーソルのCLOSE時に関連リソースを確実に解放するには、RELEASE_CURSOR=YESを指定する必要があります。
RELEASE_CURSOR=NOの場合、リンクは保持されます。オープン・カーソルの数がMAXOPENCURSORSの設定値を超えないかぎり、プリコンパイラではリンクは再利用されません。この設定によって後続の処理の実行速度が向上するため、これは実行頻度の高いSQL文には便利です。文の再解析やOracleプライベートSQL領域用のメモリー割当ては不要です。
暗黙カーソル用としてインラインで使用するときは、SQL文の実行前にRELEASE_CURSORを設定してください。明示カーソル用としてインラインで使用するときは、カーソルをCLOSEする前にRELEASE_CURSORを設定してください。
RELEASE_CURSOR=YESの場合は、HOLD_CURSOR=YESが上書きされます。この2つのオプションの相互作用を示す表は付録C「パフォーマンス・チュニング」を参照してください。
プリコンパイラを使用するか、後から手動で行うかのいずれかにより、アウトライン作成の文を実行するオプションを開発者に提供します。
構文
runoutline={yes | no}
デフォルト値
無効
使用上の注意
runoutline=yesの場合、生成されたアウトライン作成の文が、正常なプリコンパイルの最後に、プリコンパイラまたはトランスレータによって実行されます。
runoutlineの使用時には、アウトライン・オプションを、trueまたはcategory_nameに設定する必要があります。このオプションをオンにした場合、意味検査は完全に行われます(sqlcheck=full/semantics)。sqlcheck=syntax/limited/noneの場合、エラーが生成されます。
SELECT文が複数行を戻すとき、あるいはホスト配列の許容範囲を超える数の行を戻すときに、プログラムでエラーが生成されるかどうかを指定します。
構文
SELECT_ERROR={YES | NO}
デフォルト値
YES
使用上の注意
インラインまたはコマンドラインで入力できます。
SELECT_ERROR=YESのときは、行単位のSELECT文が戻した行数が多すぎたり、配列単位のSELECT文が戻した行がホスト配列に入りきらなかったりしたときに、エラーが生成されます。SELECT文の結果は未定義です。
SELECT_ERROR=NOのときは、行単位のSELECT文が戻した行数が多すぎても、配列単位のSELECT文が戻した行がホスト配列に入りきらなくても、エラーは生成されません。
YESを指定してもNOを指定しても、行は表から無作為に選択されます。選択する行の順序を特定するには、SELECT文にORDER BY句を指定する以外に方法はありません。SELECT_ERROR=NOのときORDER BY句を指定すると、配列からの選択時にOracleは先頭行または先頭のn行を戻します。SELECT_ERROR=YESを指定すると、ORDER BY句の有無を問わず、戻る行数が多すぎる場合にエラーが生成されます。
動的SQL文の文キャッシュ・サイズを指定します。
構文
STMT_CACHE = Range is 0 to 65535
デフォルト値
0
使用上の注意
stmt_cacheオプションは、アプリケーションで予想される数の個別の動的SQL文を保持するために設定されます。
システム・ヘッダー・ファイルの位置を指定します。
構文
SYS_INCLUDE=pathname | (path1, ..., pathn)
デフォルト値
システム固有
使用上の注意
Pro*C/C++では、プラットフォーム固有の標準的な位置でstdio.h
などの標準のシステム・ヘッダー・ファイルが検索されます。たとえば、ほとんどのUNIXシステムではstdio.h
ファイルのフルパス名は/usr/include/stdio.h
です。
ただし、C++コンパイラには、stdio.h
などのシステム・ヘッダー・ファイルが標準的なシステム位置にないものがあります。SYS_INCLUDEコマンドライン・オプションを使用すると、Pro*C/C++でシステム・ヘッダー・ファイルを検索するためのディレクトリ・パスのリストを指定できます。次に例を示します。
SYS_INCLUDE=(/usr/lang/SC2.0.1/include,/usr/lang/SC2.1.1/include)
SYS_INCLUDEを使用して指定した検索パスは、デフォルトのヘッダー位置より優先されます。
PARSE=NONEの場合、Pro*C/C++はシステム・ヘッダー・ファイルをプリコンパイルに含める必要がないため、SYS_INCLUDEで指定した値は無視されます。(ただし、Oracle特有のヘッダーsqlca.h
やシステム・ヘッダー・ファイルなどは、コンパイラによるプリプロセッシングのために#includeディレクティブを付けて、挿入する必要があります。)
プリコンパイラでは、次の順序でディレクトリが検索されます。
カレント・ディレクトリ
SYS_INCLUDEプリコンパイラ・オプションで指定されたシステム・ディレクトリ
INCLUDEオプションで指定されたディレクトリ(入力順)
標準ヘッダー・ファイル用の組込みディレクトリ
手順3があるため、通常はsqlca.h
とsqlda.h
などの標準ヘッダー・ファイルのディレクトリ・パスを指定する必要はありません。
SYS_INCLUDEオプションを使用してディレクトリ・パスを指定する構文は、システムによって異なります。各オペレーティング・システムの規則に従ってください。
注意: SYS_INCLUDEオプションの場合、オプション値の優先順位が逆になります。値が上書きされる他のオプションとは異なり、SYS_INCLUDEは次の場所で指定されたすべてのディレクトリ・ファイルを追加します。
ただし、カッコ内またはカッコなしでの値の渡し方には違いがあります。カッコ内で単一の値またはディレクトリ・リストを渡す場合、SYS_INCLUDEの既存の値は上書きされます。リストをカッコなしの単純な値として渡す場合、既存の値に追加されます。 |
THREADS=YESのとき、プリコンパイラはコンテキスト宣言を検索します。
構文
THREADS={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
マルチスレッド・サポートを必要とするプログラムには、すべてこのプリコンパイラ・オプションを指定する必要があります。
THREADS=YESの場合、最初のコンテキストが現れ、実行SQL文が検出される前にEXEC SQL CONTEXT USEディレクティブが検出されないと、プリコンパイラはエラーを生成します。
動的SQL方法4でANSIまたはOracleデータ型を使用するかどうかを、マイクロ・オプションで指定します。設定は、MODEオプションの設定と同じです。
構文
TYPE_CODE={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
可能なオプション設定については、表14-3を参照してください。
.
UNSAFE_NULL=YESを指定すると、標識変数を使用しないでNULLをフェッチしても、ORA-01405メッセージは生成されません。
構文
UNSAFE_NULL={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
MODE=ORACLEのときにかぎり、UNSAFE_NULL=YESを指定できます。
埋込みPL/SQLブロックのホスト変数では、UNSAFE_NULLオプションは何の効果もありません。ORA-01405エラーの発生を避けるには、必ず標識変数を使用してください。
Oracleユーザー名およびパスワードを指定します。
構文
USERID=username/password[@dbname]
デフォルト値
なし
使用上の注意
入力できるのは、コマンドラインのみです。
自動接続機能を使用している場合は、このオプションを指定しないでください。自動接続機能では、先頭にCLUSTER$の付いたOracleユーザー名しか受け付けません。「CLUSTER$」文字列の実際の値は、INIT.ORAファイルのパラメータとして設定されています。
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の場合は、データが失われることがあります。 |
ある構造体がVARCHARホスト変数として解釈されるように、Pro*C/C++プリコンパイラに対して指示します。
構文
VARCHAR={NO | YES}
デフォルト値
NO
使用上の注意
入力できるのは、コマンドラインのみです。
VARCHAR=YESのとき、次のようにC言語の構造体を記述します。
struct { short len; char arr[n]; } name;
この場合、プリコンパイラによってVARCHAR[n]型のホスト変数として解釈されます。
VARCHARはNLS_CHARオプションとともに使用してマルチバイト文字変数を指定できます。
用途
EXEC SQL OBJECT DEREF文によって戻されるオブジェクトのバージョンを指定します。
構文
VERSION={RECENT | LATEST | ANY}
デフォルト値
RECENT
使用上の注意
EXEC ORACLE OPTION文を使用してインライン入力できます。
RECENTは、現行のトランザクション内でオブジェクトがオブジェクト・キャッシュに選択されている場合は、そのオブジェクトが戻されることを意味します。シリアライズ可能モードで実行中のトランザクションの場合、このオプションの動作はLATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。ほとんどのアプリケーションは、RECENTが適切です。
LATESTは、オブジェクトがオブジェクト・キャッシュに存在しない場合は、データベースから取り出されることを意味します。オブジェクト・キャッシュに存在する場合は、サーバーからリフレッシュされます。LATESTの場合は、ネットワークのラウンドトリップが最大になるため、慎重に使用してください。LATESTを使用するのは、オブジェクト・キャッシュとサーバー側のバッファ・キャッシュとを可能なかぎり一致させる必要がある場合のみです。
ANYは、オブジェクトがすでにオブジェクト・キャッシュに存在している場合は、そのオブジェクトが戻されることを意味します。キャッシュになければ、そのオブジェクトはサーバーから取り出されます。ANYを指定すると、ネットワークのラウンドトリップは最小になります。この値を使用するのは、アプリケーションが読取り専用オブジェクトにアクセスする場合や、ユーザーがオブジェクトに排他的にアクセスする場合です。