10 プリコンパイラのオプション
この章では、Pro*C/C++プリコンパイラの実行方法とプリコンパイラ・オプションの拡張セットについて詳しく説明します。この章のトピックは、次のとおりです:
10.1 プリコンパイラのコマンド
プリコンパイラの場所はシステムごとに異なります。システム管理者またはデータベース管理者は、通常は論理名またはエイリアスを指定するか、その他のシステム固有の手段を使用して、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など一部のプラットフォームでは、値の文字列の前に特定のエスケープ文字が必要です。プラットフォーム固有のマニュアルを参照してください。
10.2 プリコンパイラのオプション
各オプションを使用すると、リソースの使用方法、エラーのレポート方法、入出力のフォーマット方法およびカーソルの管理方法を制御できます。
オプションの値はリテラルで、テキスト値または数値を表します。たとえば、次のオプションを指定するとします。
... INAME=my_test
この値はファイル名を指定する文字列リテラルです。
次にMAXOPENCURSORSオプションの例を示します。
...MAXOPENCURSORS=20
この値は数値です。
一部のオプションはブール値をとり、文字列yesまたはno、trueまたはfalse、あるいは整数リテラル1または0で表すことができます。たとえば、次のオプションを指定するとします。
... SELECT_ERROR=yes
は、次のオプションに相当します。
... SELECT_ERROR=true
または次のオプションに相当します。
... SELECT_ERROR=1
これらはすべて、実行時にSELECTエラーが検出されることを意味しています。
10.2.1 環境変数
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
10.2.2 構成ファイル
構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイル内の各レコード(行)には、オプション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
には、include
やLIBPATH
などの変数のデフォルトのパス設定が含まれています。これらのパスは、コンピュータまたはオペレーティング・システムに依存します。デフォルトのパスが、ご使用のコンピュータおよびオペレーティング・システムで有効なことを確認する必要があります。有効でない場合は、そのパスを8dot3表記に置き換えてください。
pcscfg.cfg
ファイルでは、空白を使用できません。たとえば、次のファイルに次の行が含まれるとします。
include="D:\Program Files\Microsoft Visual Studio\VC98\include"
プリコンパイルは失敗します。次の行に置き換えることができます。
include=D:\Progra~1\Microa~4\VC98\include
Pro*C/C++のユーザーはそれぞれ、1つ以上のプライベート構成ファイルを持つことができます。構成ファイルの名前は、必ずCONFIG=プリコンパイラ・オプションを使用して指定してください。
注意:
構成ファイルはネストできません。つまり、構成ファイル内では、CONFIG=は有効ではありません。
関連項目
10.2.3 オプション値の優先順位
オプションの値は、優先順位の低いものから順に、次のように決定されます。
たとえば、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を参照してください。
注意:
プリコンパイラのデフォルト値については、システム固有のマニュアルを参照してください。プラットフォーム上では、この章で示された値から変更されている可能性もあります。
現在の設定値の確認
コマンドラインで疑問符(?)を使用すると、複数のオプションのカレント値を対話形式で調べることができます。たとえば、次のコマンドを発行したとします。
proc ?
この場合、すべてのオプションが、現在の設定値とともに端末に出力(表示)されます。(UNIXシステムでCシェルを使用しているときには「?」をバックスラッシュでエスケープしてください。)この場合、値はプリコンパイラに組み込まれているもので、システム構成ファイルに値があれば、それが優先されます。ただし、次のコマンド
proc config=my_config_file.h ?
を入力したときに、カレント・ディレクトリにmy_config_file.h
というファイルがあると、すべてのオプションがリスト形式で表示されます。ユーザー構成ファイルの値によって、不足している値が補われ、Pro*C/Cプリコンパイラに組み込まれている値またはシステム構成ファイルに指定されている値が置き換えられます。
オプション名を指定し、その後ろに=?を付けるだけで、どれか1つのオプションの現在の設定値を調べることもできます。次に例を示します。
proc maxopencursors=?
このように入力すると、MAXOPENCURSORSオプションの現在のデフォルト値が出力されます。
次のように入力するとします。
proc
すると、表10-2のような短いサマリーが表示されます。
10.2.4 マクロ・オプションおよびマイクロ・オプション
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を指定すると、カーソルはクローズします。
関連項目
10.2.5 プリコンパイル中の状況
プリコンパイル時に、ホスト・プログラムに埋め込まれているSQL文は、Pro*C/C++が生成するCまたはC++のコードに置換されます。生成されたコードには、データ型、データ長、ホスト変数のアドレスを示すデータ構造や、ランタイム・ライブラリであるSQLLIBに必要なその他の情報も含まれています。このコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。
注意:
プリコンパイラでは、Oracle Call Interface(OCI)に対するコールは生成されません。
表10-2は主なプリコンパイラ・オプションのクイック・リファレンスです。受入れ可能でも効力を持たないオプションは、この表には記載されていません。
10.2.6 オプションの適用範囲
プリコンパイル・ユニットは、Cコードと1つ以上の埋込みSQL文を含むファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのプリコンパイル・ユニットにのみ効力を持ちます。たとえば、ユニットAに対してHOLD_CURSOR=YESおよびRELEASE_CURSOR=YESを指定し、ユニットBには指定しなければ、ユニットAのSQL文はこれらのHOLD_CURSOR値およびRELEASE_CURSOR値を使用して実行されますが、ユニットBのSQL文はデフォルト値を使用して実行されます。
10.2.7 Windowsプラットフォーム用Pro*C/C++プリコンパイラの問題
この項では、Windowsプラットフォーム用Pro*C/C++関連の問題について説明します。
10.2.7.4 INCLUDE
PARSE=PARTIAL
またはPARSE=FULL
でプリコンパイルするサンプル・プログラムの場合、c:\program files\devstudio\vc\include
のインクルード・パスが追加されています。Microsoft Visual Studioが別の場所にインストールされている場合、サンプル・プログラムで正しくプリコンパイルするために、「インクルード・ディレクトリ」フィールドを適宜変更します。
10.3 クイック・リファレンス
表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ソース・コードが解析されるかどうか。 |
PLAN_BASELINE={module_name |YES |NO} |
NO |
モジュール名を指定してSQL計画ベースラインを作成します。 |
PLAN_PREFIX={prefix_name| none} |
なし |
計画名が128バイト以内であることを確認します。 |
PLAN_RUN={YES | NO} |
NO |
生成されたSQLファイルを実行します。 |
PLAN_FIXED={YES | NO} |
YES |
作成した計画ベースラインが固定であるか、非固定であるかを指定します。 |
PLAN_ENABLED={YES | NO} |
YES |
作成される計画ベースラインを有効にします。 |
MEMFORPREFETCH=0から4294967294 |
なし |
指定メモリーに格納する行をプリフェッチすることで問合せを高速化します。 |
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 |
どのバージョンのオブジェクトを戻すか。 |
10.4 オプションの入力
どのプリコンパイラ・オプションも、コマンドラインに入力できます。また、その多くは、EXEC ORACLE OPTION文を使用してプリコンパイラ・プログラムのソース・ファイルにインライン入力できます。
10.4.2 インライン
次の構文を使用してEXEC ORACLE文を記述すると、オプションをインライン入力できます。
EXEC ORACLE OPTION (OPTION_NAME=value);
たとえば、次のように記述します。
EXEC ORACLE OPTION (RELEASE_CURSOR=yes);
10.4.2.1 EXEC ORACLEの用途
EXEC ORACLE機能は、プリコンパイル中にオプション値を変更する場合に特に便利です。たとえば、HOLD_CURSORとRELEASE_CURSORを1文単位で変更する場合があります。
また、コマンドラインで入力できる文字数が、使用しているオペレーティング・システムで制限されているときは、オプションをインラインまたは構成ファイルで指定すると便利です。
関連項目:
インライン・オプションを使用して実行時パフォーマンスを最適化する方法は、パフォーマンス・チューニングを参照してください。
10.4.2.2 EXEC ORACLEのスコープ
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);
10.4.3 列プロパティのサポート
列プロパティは8バイトの値で戻され、各ビットが1つの列プロパティを示します。3つの列プロパティがサポートされています。
+---------------------------------------------------+ ! 32 |..............| 10 | 9 | 8 |......| 3 | 2 | 1 | +---------------------------------------------------+ | | | | | |-> auto-increment column | |-> auto value always generated |-> if generated by default when null
列プロパティは、新しいSQLDAメンバー(sqlda->CP[]
)を使用して動的文から取得できます。
struct SQLDA { /* ub4 */ int N; /* Descriptor size in number of entries */ .......... .......... .......... .......... /* ub2* */ short *Z; /* Ptr to Arr of cur lengths of ind. var. names*/ /* ub8* */ long long *CP; /* Ptr to Arr of column properties */ };
このメンバーはメタデータDESCRIBEの一部として更新されます。
列プロパティは、新しい関数SQLGetColProp()
を使用した静的文で取得できます(この関数は最後に実行された文から列プロパティを取得します)。
void SQLGetColProp( void *uga, --> IN -- run time context text *coln, --> IN -- column name ub2 *colatr, --> IN -- column attributes ub8 *colprop --> IN/OUT -- column attribute/ub8 value that holds column properties )
SQLGetColProp()
は、列属性colatr
で決定された値を戻します。
-
SQL_ATTR_COL_PROPERTIES: 指定した列の列プロパティを含む、8バイトの値(
colprop
)を戻します。 -
SQL_ATTR_COL_PROPERTY_IS_IDENTITY
colprop
は、指定した列がID列の場合にtrueになります。 -
SQL_ATTR_COL_PROPERTY_IS_GEN_ALWAYS
colprop
は、指定した列が常に自動増分値を生成する場合にtrueになります。 -
SQL_ATTR_COL_PROPERTY_IS_GEN_BY_DEF_ON_NULL
colprop
は、指定した列がデフォルトnull列制約である場合に自動増分値を生成するときは、trueになります。
10.5 プリコンパイラ・オプションの使用方法について
この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。プリコンパイラ・オプションをアルファベット順に並べ、オプションごとに用途、構文およびデフォルト値を示しています。さらに「使用上の注意」で、オプションについて説明します。
10.5.1 AUTO_CONNECT
用途
CLUSTER$アカウントへの自動接続を可能にします。
構文
AUTO_CONNECT={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
AUTO_CONNECT=YESで、最初の実行SQL文を処理するときにアプリケーションがまだデータベースに接続されていない場合、次のユーザーIDを使用して接続が試行されます。
CLUSTER$username
usernameは現行のオペレーティング・システムのユーザー名またはタスク名、CLUSTER$usernameは有効なOracleユーザーIDです。
AUTO_CONNECT=NOの場合、Oracleに接続するにはプログラムでCONNECT文を使用する必要があります。
10.5.2 CHAR_MAP
用途
char型またはchar[n]型のCホスト変数およびそれらに対するポインタのSQLへのデフォルトのマッピングを指定します。
構文
CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF}
デフォルト値
CHARZ
使用上の注意
リリース8.0より前のリリースでは、SQL DECLARE文を使用してCHARなどのcharまたはchar[n]ホスト変数を宣言する必要がありました。外部データ型VARCHAR2およびCHARZが、Oracle7のデフォルト文字マッピングでした。
関連項目:
-
CHAR_MAP設定の表、データ型の説明、それがデフォルトになる場所については、VARCHAR変数を参照してください。
-
Pro*C/C++でのCHAR_MAPの使用例は、CHAR_MAPオプションのインラインでの使用方法を参照してください。
10.5.3 CINCR
用途
データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。
構文
CINCR = 範囲は1から(CMAX-CMIN)。
デフォルト値
1
使用上の注意
最初は、CMINにより指定されたとおりに物理接続がすべてサーバーに対してオープンされます。それ以降は、必要な場合にのみ物理接続がオープンされます。パフォーマンスを最適にするには、CMINを、アプリケーションによる実行が計画または予想される同時実行文の合計数に設定する必要があります。デフォルト値は2に設定されます。
10.5.4 CLOSE_ON_COMMIT
用途
構文
CLOSE_ON_COMMIT={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインまたは構成ファイルからのみ入力できます。
このオプションは、DECLARE CURSOR文でWITH HOLD句を使用せずに宣言されたカーソルがある場合にのみ有効です(WITH HOLD句が指定されていると、このオプションも、MODEオプションに対応するそれまでの動作も無効になります)。CLOSE_ON_COMMITより高いレベルでMODEが指定されていると、MODEが優先されます。たとえば、デフォルトはMODE=ORACLEおよびCLOSE_ON_COMMIT=NOです。コマンドラインでMODE=ANSIと指定した場合は、WITH HOLD句を使用せずに宣言されているカーソルはすべて、コミット時にクローズされます。
CLOSE_ON_COMMIT=NO (MODE=ORACLEの場合)の場合、COMMITまたはROLLBACKを発行しても、クローズされるのはFOR UPDATE句を使用して宣言されたカーソルまたはCURRENT OF句で参照されるカーソルのみです。その他のカーソルはCOMMITまたはROLLBACK文による影響を受けず、オープンされている場合はオープンされたままです。ただし、CLOSE_ON_COMMIT=YES (MODE=ANSIの場合)のときにCOMMITまたはROLLBACKを発行すると、すべてのカーソルがクローズします。
10.5.5 CMAX
用途
データベースに対してオープンできる物理接続の最大数を指定します。
構文
CINCR = 範囲は1から65535
デフォルト値
100
使用上の注意
CMAX値は、CMIN+CINCRより大きく設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、同時データベース操作を100個実行するように設定すれば十分です。ユーザーが適切な値を設定できます。
10.5.6 CMIN
用途
データベースに対してオープンできる物理接続の最小数を指定します。
構文
CINCR = 範囲は1から(CMAX-CINCR)。
デフォルト値
2
使用上の注意
CMAX値は、CMIN+CINCRより大きく設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、同時データベース操作を100個実行するように設定すれば十分です。ユーザーが適切な値を設定できます。
10.5.7 CNOWAIT
用途
この属性は、プール内の他のすべての物理接続が使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。
構文
CNOWAIT = 範囲は1から65535。
デフォルト値
未設定を意味する0。
使用上の注意
物理接続が使用できず、これ以上物理接続をオープンできない場合、この属性が設定されているとエラーが発生します。そうでない場合、コールは別の接続が取得されるまで待機します。デフォルトでは、CNOWAITは設定されないため、スレッドは、エラーを戻すかわりに、空いている接続を取得できるまで待機します。
10.5.8 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++互換コードが生成されます。
関連項目:
このオプション値を使用するすべての結果は、コードの生成を参照してください。
10.5.9 COMMON_PARSER
用途
SQL99構文のSELECT、INSERT、DELETE、UPDATEおよびDECLARE CURSOR文のカーソル本体がサポートされます。
構文
COMMON_PARSER={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインで入力できます。
10.5.10 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が設定されていると、このオプションは効果がありません。
10.5.11 CONFIG
用途
ユーザー構成ファイルの名前を指定します。
構文
CONFIG=filename
デフォルト値
なし。
使用上の注意
コマンドラインでのみ入力できます。
ユーザー構成ファイルの名前および位置をPro*C/C++に通知する方法は、このオプション以外にありません。
10.5.12 CPOOL
用途
このオプションに基づき、プリコンパイラでは、SQLLIBに接続プール機能を有効または無効にするように指示する適切なコードを生成します。
構文
CPOOL = {YES|NO}
デフォルト値
NO
使用上の注意
このオプションがNOに設定されている場合、プリコンパイラではその他の接続プーリング・オプションを無視します。
10.5.13 CPP_SUFFIX
用途
CPP_SUFFIXオプションを使用すると、CODE=CPPオプションを指定した場合に生成されるC++出力ファイルに、プリコンパイラによって付けられるファイル拡張子を指定できます。
構文
CPP_SUFFIX=filename_extension
デフォルト値
システム固有。
使用上の注意
ほとんどのCコンパイラでは、入力ファイルのデフォルト拡張子は.cになります。しかし、C++コンパイラでは、ファイル名の拡張子がコンパイラごとに異なる場合があります。CPP_SUFFIXオプションを指定すると、プリコンパイラで生成されるファイル名拡張子を指定できます。このオプションの値は、引用符もピリオドも付けない文字列です。たとえば、CPP_SUFFIX=ccまたはCPP_SUFFIX=Cのように指定します。
10.5.14 CTIMEOUT
用途
指定した時間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続を最適な数に保ちます。
構文
CTIMEOUT = 範囲は1から65535。
デフォルト値
未設定を意味する0。
使用上の注意
接続プールが終了されるまで、物理接続はクローズされません。新しい物理接続を作成すると、サーバーへのラウンド・トリップが必要になります。
10.5.16 DBMS
用途
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プリコンパイラ・オプションに用意されています。
表10-3 DBMSとMODEの相互作用
状況 | DBMS=V7 | V8MODE=ANSI | DBMS=V7 | V8MODE=ORACLE |
---|---|---|
「データが見つかりません」という警告コード |
+100 |
+1403 |
標識変数を使用しないNULLのフェッチ |
エラー-1405 |
エラー-1405 |
インジケータ変数を使用しない切捨て値のフェッチ |
エラーはなし。sqlwarn[1]が設定されます。 |
エラーはなし。sqlwarn[1]が設定されます。 |
COMMITまたはROLLBACKによるカーソルのクローズ |
すべて明示的に実行されます。 |
CURRENT OFのみ |
すでにオープンしているカーソルのオープン |
エラー-2117 |
エラーなし |
すでにクローズしているカーソルのクローズ |
エラー-2114 |
エラーなし |
SQLグループ関数によるNULLの無視 |
警告なし |
警告なし |
複数行の問合せでSQLグループ関数をコールするとき |
FETCH時 |
FETCH時 |
SQLCA構造体の宣言 |
オプション |
必須 |
SQLCODEまたはSQLSTATE状態変数の宣言 |
必須 |
指定できるがOracleは無視 |
整合性制約 |
有効 |
有効 |
ロールバック・セグメント用のPCTINCREASE |
使用不可 |
使用不可 |
MAXEXTENTS記憶域パラメータ |
使用不可 |
使用不可 |
関連項目
10.5.17 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を組み込まなければ、このオプションを使用するとプリコンパイル時にエラーが発生します。
10.5.18 DEFINE
用途
#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コンパイラの名前を定義する必要があります。
10.5.19 DURATION
用途
後続のEXEC SQL OBJECT CREATE文とEXEC SQL OBJECT DEREF文に使用される確保継続時間を設定します。キャッシュ内のオブジェクトは、保持期間の終わりに暗黙的に解放されます。
構文
DURATION={TRANSACTION | SESSION}
デフォルト値
TRANSACTION
使用上の注意
EXEC ORACLE OPTION文を使用してインライン入力できます。
TRANSACTIONは、オブジェクトがトランザクションの完了時に暗黙的に解放されることを意味します。
SESSIONは、オブジェクトが接続の終了時に暗黙的に解放されることを意味します。
10.5.20 DYNAMIC
用途
このマイクロ・オプションでは、動的SQL方法4の記述子の動作を指定します。MODEの設定によりDYNAMICの設定が決まります。
構文
DYNAMIC={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
EXEC ORACLE OPTION文を使用してインラインで入力することはできません。
DYNAMICオプションの設定については、「ANSI動的SQLのプリコンパイラ・オプション」を参照してください。
10.5.21 ERRORS
用途
エラー・メッセージを端末とリスト・ファイルの両方に送信(YES)するか、リスト・ファイルにのみ送信(NO)するかを指定します。
構文
ERRORS={YES | NO}
デフォルト値
YES
使用上の注意
コマンドラインまたは構成ファイルでのみ入力できます。
10.5.22 ERRTYPE
用途
型ファイルの処理中に生成されたエラーを書き込む出力ファイルを指定します。省略すると、エラーは画面に出力されます。
構文
ERRTYPE=filename
デフォルト値
なし。
使用上の注意
生成されるエラー・ファイルは1つのみです。複数の値を入力すると、最後の値がプリコンパイラで使用されます。
関連項目
10.5.23 EVENTS
用途
アプリケーションが通知の登録および受信に対応しているかどうかを指定します。
構文
EVENTS={YES | NO}
デフォルト値
NO
使用上の注意
コマンドラインからのみ入力できます。
10.5.24 FIPS
用途
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句のホスト変数の前に任意指定で付加するコロン
10.5.25 HEADER
用途
プリコンパイル済ヘッダー・ファイルを許可します。プリコンパイル済ヘッダー・ファイルのファイル拡張子を指定します。
構文
HEADER=extension
デフォルト値
なし
使用上の注意
ヘッダー・ファイルをプリコンパイルする場合、このオプションは必須で、ヘッダー・ファイルのプリコンパイルによって生成される出力ファイルのファイル拡張子の指定に使用されます。
通常のPro*C/C++プログラムをプリコンパイルする場合、このオプションは任意です。指定すると、Pro*C/C++プログラムのプリコンパイル時に、プリコンパイル済ヘッダーのメカニズムを使用できます。
どちらの場合も、このオプションで#includeディレクティブの処理時に使用するファイル拡張子も指定できます。指定した拡張子の付いた#includeファイルが存在する場合、Pro*C/C++ではそのファイルをPro*C/C++によって以前に生成されたプリコンパイル済ヘッダー・ファイルとみなします。Pro*C/C++は、#includeディレクティブを処理してインクルードされるヘッダー・ファイルをプリコンパイルするかわりに、そのファイルからデータをインスタンス化します。
このオプションは、コマンドラインまたは構成ファイルでのみ使用できます。インラインでは使用できません。このオプションを使用する場合は、ファイル拡張子のみを指定します。ファイル・セパレータは含めないでください。たとえば、拡張子にピリオド(.)は含めないでください。
関連項目
10.5.26 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を指定した場合は、リンクは維持され、プリコンパイラはリンクを再利用しません。これによって、以降の実行をスピードアップし、文を再解析したり、OracleプライベートSQL領域にメモリーを割り当てる必要がなくなるため、実行頻度の高いSQL文に使用すると便利です。
暗黙カーソルをインラインで使用する場合は、SQL文の実行前にHOLD_CURSORを設定してください。明示カーソル用としてインラインで使用するときは、カーソルをクローズする前にHOLD_CURSORを設定してください。
RELEASE_CURSOR=YESはHOLD_CURSOR=YESをオーバーライドし、HOLD_CURSOR=NOはRELEASE_CURSOR=NOをオーバーライドします。この2つのオプションの相互作用方法を示す情報は、表B-1を参照してください。
関連項目
10.5.27 IMPLICIT_SVPT
用途
新しくバッチ処理された挿入を開始する前に、暗黙的なセーブポイントを設定するかどうかを制御します。
構文
implicit_svpt={YES|NO}
デフォルト値
NO
使用上の注意
implict_svpt=yesの場合、行の新しいバッチの開始前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的な「セーブポイントへのロールバック」が実行されます。このオプションは、DB2との互換性のために用意されていますが、余分なラウンドトリップとなるためマイナス面であることは明らかです。
implict_svpt=noの場合、暗黙的セーブポイントは設定されません。バッファ済INSERTでエラーが発生すると、アプリケーションに通知されますが、ロールバックは実行されません。
10.5.28 INAME
用途
入力ファイル名を指定します。
構文
INAME=path_and_filename
デフォルト値
なし。
使用上の注意
コマンドラインでのみ入力できます。
プリコンパイル時は、すべての入力ファイル名を一意にする必要があります。
ファイル名拡張子が.pc
の場合は省略できます。入力ファイル名がコマンドラインの先頭オプションになっているときは、オプションのINAME=の部分を省略できます。次に例を示します。
proc sample1 MODE=ansi
この例では、ANSIモードを使用してファイルsample1.pc
をプリコンパイルします。このコマンドは次のコマンドに相当します。
proc INAME=sample1 MODE=ansi
注意:
sqlctx
ハッシュ値は、Pro*C/C++コマンドに渡されるINAME
パラメータに基づいて生成されます。そのため、同じ名前の複数のファイルが、異なる関数を含む異なるディレクトリに格納されており、プログラムのプリコンパイルのためにビルド・スクリプトが物理ディレクトリに送られるようなアプリケーションでは、問題が発生する可能性があります。したがって、より高いレベルにMakeファイルを配置し、そのパス名を使用してファイルをプリコンパイルする必要はありません。
10.5.29 INCLUDE
用途
#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は次の場所で指定されたすべてのディレクトリ・ファイルを追加します。
-
プリコンパイラ
-
Pro*C/C++システム構成ファイル
-
Pro*C/C++ユーザー構成ファイル
-
コマンドライン
-
インライン
ただし、カッコ内またはカッコなしでの値の渡し方には違いがあります。カッコ内で単一の値またはディレクトリ・リストを渡す場合、INCLUDEの既存の値は上書きされます。リストをカッコなしの単純な値として渡す場合、既存の値に追加されます。
10.5.30 INTYPE
用途
OTTで生成された型のファイルを1つ以上指定します(アプリケーションでオブジェクト型が使用される場合にのみ必要です)。
構文
INTYPE=(file_1,file_2,...,file_n)
デフォルト値
なし。
使用上の注意
Pro*C/C++コードには、オブジェクト型ごとに1つの型のファイルが存在します。
10.5.31 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ディレクティブを挿入させることができます。
関連項目
10.5.32 LNAME
用途
リスト・ファイル名を指定します。
構文
LNAME=filename
デフォルト値
なし。
使用上の注意
コマンドラインでのみ入力できます。
リスト・ファイルのデフォルトのファイル名の拡張子は.lis
です。
10.5.33 LTYPE
用途
生成されるリスト・ファイルの型を指定します。
構文
LTYPE={NONE | SHORT | LONG}
デフォルト値
SHORT
使用上の注意
コマンドラインまたは構成ファイルで入力できます。
リスト・ファイル生成時のデフォルトの形式はLONGです。LTYPE=LONGを指定すると、すべてのソース・コードが解析順に出力されます。また、メッセージも生成順に出力されます。さらに、現在有効なPro*C/C++オプションが出力されます。
LTYPE=SHORTを指定すると、生成されたメッセージのみが出力され、ソース・コードは出力されません。ソース・ファイルへの参照行はメッセージ状態を生成したコードの位置を特定するのに役立ちます。
LTYPE=NONEを指定すると、LNAMEオプションでリスト・ファイル名を明示的に指定しないかぎり、リスト・ファイルは作成されません。後者の場合、リスト・ファイルはLTYPE=LONGを想定して生成されます。
10.5.34 MAX_ROW_INSERT
用途
INSERT文の実行前にバッファする必要がある行の数を制御します。
構文
max_row_insert={0から1000}
デフォルト値
0
使用上の注意
0よりも大きい任意の値を指定すると、バッファ済INSERT機能が有効化され、INSERT文の実行前に多くの行がバッファされます。
10.5.35 MAXLITERAL
用途
プリコンパイラによって生成される文字列リテラルの最大長を指定します。これによってコンパイラの制限を超えないようにします。
構文
MAXLITERAL=integer(範囲は10から1024)
デフォルト値
1024
使用上の注意
インラインでは入力できません。
MAXLITERALに指定できる最大値はコンパイラによって異なります。たとえば、Cコンパイラには513文字以上の文字列リテラルを扱えないものがあるため、そのような場合はMAXLITERAL=512と指定します。
MAXLITERALで指定した長さを超える文字列はプリコンパイル中に分割され、実行時に再び結合(連結)されます。
インラインでMAXLITERALを入力することはできますが、プログラムで値を設定できるのは1回のみで、EXEC ORACLE文を最初のEXEC SQL文の前に指定する必要があります。指定しない場合、Pro*C/C++は警告メッセージを発行し、余分または誤って指定したEXEC ORACLE文を無視して、処理を続行します。
10.5.36 MAXOPENCURSORS
用途
同時にオープンされ、プリコンパイラによりキャッシュに保存されたままになるカーソルの数を指定します。
構文
MAXOPENCURSORS=integer
デフォルト値
10
使用上の注意
インラインまたはコマンドラインで入力できます。
MAXOPENCURSORSを使用すると、プログラムのパフォーマンスを改善できます。分割プリコンパイル時には、MAXOPENCURSORSを使用します。MAXOPENCURSORSオプションには、SQLLIBカーソル・キャッシュの初期サイズを指定します。
HOLD_CURSOR=NOのときに、暗黙的な文が実行されるか明示カーソルがクローズされると、カーソル・エントリは再利用可能とマークされます。この文が再び発行された時にカーソル・エントリが別の文に使用されていなければ、カーソルは再利用されます。
割当て済のカーソル数がMAXOPENCURSORSに満たない場合に新しいカーソルが必要になると、キャッシュに格納された次のカーソルが割り当てられます。MAXOPENCCURSORSを超えると、Oracleではまず以前のエントリの再利用を試みます。空いているエントリがない場合、追加キャッシュ・エントリが割り当てられます。Oracleは、プログラムがメモリーを消費するか、データベース・パラメータのOPEN_CURSORSを超過するまで継続してこれを行います。
通常の処理では、HOLD_CURSORS=NOでRELEASE_CURSOR=NO (デフォルト)を使用するときには、データ・ディクショナリで使用されるカーソルが文を処理できるように、MAXOPENCURSORSの値をOPEN_CURSORSデータベース・パラメータの値より6以上小さい値に設定しないことをお薦めします。
プログラムの同時オープン・カーソル数を増す必要がある場合には、MAXOPENCURSORSを必要な数まで増やして再度指定することがあります。45から50の値を指定することは珍しくありませんが、ユーザー・プロセスのメモリー領域にカーソル1つにつき、1つのプライベートSQL領域が必要なことに注意してください。デフォルト値の10は、大半のプログラムには適切な値です。
10.5.37 MODE
用途
プログラムが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の場合は、再解析を避けるためにオープンされているカーソルを再オープンできます。)
-
各EXEC SQL文のスコープ内にSQLCODEという名前のlong変数またはcharのSQLSTATE[6]変数(どちらの変数も大文字にする必要があります)のいずれかを宣言する必要があります。すべての場合に同一のSQLCODEまたはSQLSTATE変数を使用する必要はありません。つまり、変数はグローバル変数でなくてもかまいません。
-
SQLCAの宣言はオプションです。SQLCAを挿入する必要はありません。
-
SQLCODEに戻される「データが見つかりません」というOracle警告コードは、+1403から+100になります。メッセージ・テキストは変更されていません。
10.5.38 NATIVE_TYPES
用途
ネイティブfloat/doubleをサポートします。
構文
NATIVE_TYPES = {YES|NO}
デフォルト値
NO
使用上の注意
ネイティブfloatおよびネイティブdoubleデータ型は、単精度と倍精度の浮動小数点値を表します。これらはネイティブ、つまりホスト・システムの浮動小数点形式で表されます。
10.5.39 NLS_CHAR
用途
プリコンパイラでマルチバイト文字変数として扱われるCホスト文字変数を指定します。
構文
NLS_CHAR=varnameまたはNLS_CHAR=(var_1,var_2,...,var_n)
デフォルト値
なし。
使用上の注意
コマンドラインまたは構成ファイルでのみ入力できます。
このオプションを使用すると、プリコンパイラでマルチバイト文字変数として扱う必要のある1つ以上のホスト変数のリストを、プリコンパイル時に指定できます。このオプションでは、C言語のchar変数またはPro*C/C++のVARCHAR変数のみを指定できます。
オプション・リストにプログラムで宣言していない変数を指定しても、プリコンパイラのエラーは発生しません。
10.5.40 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には、有効な固定幅の各国語キャラクタ・セットを設定する必要があります。可変長幅の各国語キャラクタ・セットはサポートされていません。
コマンドラインまたは構成ファイルでのみ入力できます。
10.5.42 ONAME
用途
出力ファイル名を指定します。出力ファイルは、プリコンパイラで生成される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値を指定すると、生成ファイルの名前に拡張子は付きません。
10.5.43 ORACA
用途
プログラムでOracle通信領域(ORACA)を使用できるかどうかを指定します。
構文
ORACA={YES | NO}
デフォルト値
NO
使用上の注意
インラインまたはコマンドラインで入力できます。
ORACA=YESのときは、プログラムにEXEC SQL INCLUDE ORACA文または#include oraca.h
文を記述する必要があります。
10.5.44 OUTLINE
用途
SQL文に対してアウトラインSQLファイルを生成する必要があることを示します。
構文
outline={yes | no | category_name}
デフォルト値
no
使用上の注意
値がyes
の場合、アウトラインSQLファイルはDEFAULTカテゴリに含まれている必要があります。生成されるアウトライン書式は次のとおりです。
DEFAULT_<filename>_<filetype>_<sequence_no>
カテゴリ名が示されている場合は、そのカテゴリにSQLファイルを生成する必要があります。この場合、生成されるアウトライン書式は次のようになります。
<category_name>_<filename>_<filetype>_<sequence_no>
値がno
の場合、アウトラインSQLファイルは生成されません。
このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
10.5.45 OUTLNPREFIX
用途
アウトライン名の生成を制御します。
構文
outlnprefix={none | prefix_name}
デフォルト値
no
使用上の注意
outlnprefix=prefix_nameの場合、アウトライン書式は次のとおりです。
<category_name>_<filename>_<filetype>
この書式は、アウトライン名の<prefix_name>
に置き換えられます。
アウトライン名が128バイトを超える場合、このオプションは接頭辞名を指定する際に有効です。
outlnprefix=noneの場合、アウトライン名はシステムによって生成されます。次の書式で生成されます。
<category_name>_<filename>_<filetype>_<sequence_no>
このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneまたはoutline=false(あるいはその両方)の場合、エラーが生成されます。
10.5.46 PAGELEN
用途
リスト・ファイルの物理ページごとの行数を指定します。
構文
PAGELEN=integer
デフォルト値
80
使用上の注意
インラインでは入力できません。値の許容範囲は30から256です。
10.5.47 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以外の値です。使用するシステム固有のマニュアルを参照してください。
関連項目
10.5.48 PLAN_BASELINE
用途
モジュール名を指定してSQL計画ベースラインを作成します。
構文
PLAN_BASELINE={module_name | YES | NO}
デフォルト値
NO
使用上の注意
このモジュール名の後にファイル名、ファイル・タイプおよび順序番号が付いて、一意の計画名が生成されます。
10.5.49 PLAN_PREFIX
用途
計画名が128バイト以内であることを確認します。
構文
PLAN_PREFIX={prefix_name| none}
デフォルト値
なし
使用上の注意
これはオプションです。デフォルトはnoneで、接頭辞名が使用されないことを意味し、計画名が128バイトを超えるとエラー・メッセージが生成されます。
10.5.50 PLAN_RUN
用途
生成されたSQLファイルを実行します。
構文
PLAN_RUN={YES | NO}
デフォルト値
NO
使用上の注意
PLAN_RUNオプションを設定しない場合、生成されるSQLファイルは実行されません。
10.5.51 PLAN_FIXED
用途
作成した計画ベースラインが固定であるか、非固定であるかを指定します。
構文
PLAN_FIXED={ YES | NO }
デフォルト値
YES
使用上の注意
NOを設定すると、非固定の計画ベースラインが作成されます。
10.5.52 PLAN_ENABLED
用途
作成された計画ベースラインの使用を有効にします。
構文
PLAN_ENABLED={ YES | NO }
デフォルト値
YES
使用上の注意
デフォルトの設定では、計画の選択時に、作成された計画ベースラインが使用されます。NOを設定すると、計画ベースラインが作成されますが、手動で有効にするまで使用されません。
10.5.53 MEMFORPREFETCH
用途
このオプションを使用すると、指定したメモリーに格納可能な行数をプリフェッチすることによって、問合せが高速化します。
構文
MEMFORPREFETCH=integer
デフォルト値
値は設定されていません。
使用上の注意
このオプションは、構成ファイルまたはコマンドラインで使用できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。
インラインで使用するときは、明示カーソルを使用し、OPEN文の前に配置する必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインMEMFORPREFETCHオプションによって決まります。
MEMFORPREFETCHは、デフォルトでは値が設定されていません。プリフェッチをオフにするには、コマンドラインでMEMFORPREFETCH=0を使用します。
LONG列およびLOB列へのアクセス中もプリフェッチはオフになります。MEMFORPREFETCHを使用すると、単一行フェッチのパフォーマンスが向上します。配列フェッチを実行する場合、MEMFORPREFETCHの値は割り当てた値に関係なく無効になります。
アプリケーションにおけるすべてのフェッチを支援できる完全なプリフェッチ・メモリー値はありません。
したがって、MEMFORPREFETCHオプションを使用する場合は、様々な値をテストし、プログラム内のすべての文にわたってパフォーマンスが向上する値を選択してください。いくつかの文を個別にチューニングする必要がある場合は、EXEC ORACLE OPTIONを使用してMEMFORPREFETCHオプションをインラインで指定します。この操作は、このコマンドの後のすべてのフェッチ文に影響を与えます。特定のFETCH文のパフォーマンスが向上するようにプリフェッチ・メモリーを選択してください。この個別プリフェッチ・カウントを実現するには、(コマンドラインからではなく)インラインのプリフェッチ・オプションを指定します。
10.5.54 PREFETCH
用途
任意の行数を事前に取得して問合せの実行速度を向上させます。
構文
PREFETCH=integer
デフォルト値
1
使用上の注意
構成ファイルまたはコマンドラインで入力できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。
インラインで使用する場合、明示カーソルのあるOPEN文の前に置く必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。
指定可能な値の範囲は0から65535です。
10.5.55 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を指定すると、リンクは保持されます。オープン・カーソルの数がMAXOPENCURSORSの設定値を超えないかぎり、プリコンパイラではリンクは再利用されません。この設定によって後続の処理の実行速度が向上するため、これは実行頻度の高いSQL文には便利です。文を解析しなおしたり、OracleプライベートSQL領域にメモリーを割り当てる必要がないためです。
暗黙カーソルをインラインで使用する場合は、SQL文の実行前にRELEASE_CURSORを設定してください。明示カーソル用としてインラインで使用するときは、カーソルをCLOSEする前にRELEASE_CURSORを設定してください。
RELEASE_CURSOR=YESの場合は、HOLD_CURSOR=YESが上書きされます。
関連項目
10.5.56 RUNOUTLINE
用途
プリコンパイラを使用して、または後で開発者が手動で「CREATE OUTLINE」文を実行するオプションを提供します。
構文
runoutline={yes | no}
デフォルト値
no
使用上の注意
runoutline=yesの場合は、プリコンパイルが正常に完了した後で、プリコンパイラ/トランスレータによって、生成された「CREATE OUTLINE」文が実行されます。
RUNOUTLINEを使用する場合は、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。
10.5.57 SELECT_ERROR
用途
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句の有無を問わず、戻る行数が多すぎる場合にエラーが生成されます。
10.5.58 STMT_CACHE
用途
動的SQL文の文キャッシュ・サイズを指定します。
構文
STMT_CACHE = 0から65535
デフォルト値
0
使用上の注意
stmt_cacheオプションを設定すると、アプリケーションでそれぞれの動的SQL文の予測数を保持できます。
10.5.59 SYS_INCLUDE
用途
システム・ヘッダー・ファイルの位置を指定します。
構文
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は次の場所で指定されたすべてのディレクトリ・ファイルを追加します。
-
プリコンパイラ
-
Pro*C/C++システム構成ファイル
-
Pro*C/C++ユーザー構成ファイル
-
コマンドライン
-
インライン
ただし、カッコ内またはカッコなしでの値の渡し方には違いがあります。カッコ内で単一の値またはディレクトリ・リストを渡す場合、SYS_INCLUDEの既存の値は上書きされます。リストをカッコなしの単純な値として渡す場合、既存の値に追加されます。
10.5.60 THREADS
用途
THREADS=YESの場合、プリコンパイラではコンテキスト宣言を検索します。
構文
THREADS={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
マルチスレッド・サポートを必要とするプログラムには、すべてこのオプションを指定する必要があります。
THREADS=YESの場合、最初のコンテキストが現れ、実行SQL文が見つかる前にEXEC SQL CONTEXT USEディレクティブが検出されないと、プリコンパイラではエラーが発生します。
関連項目
10.5.61 TYPE_CODE
用途
このマイクロ・オプションは、動的SQL方法4でANSIまたはOracleのいずれのデータ型コードを使用するかを指定します。この設定は、MODEオプションの設定と同じです。
構文
TYPE_CODE={ORACLE | ANSI}
デフォルト値
ORACLE
使用上の注意
インラインでは入力できません。
設定できるオプションの詳細は、 表14-3を参照してください。
10.5.62 UNSAFE_NULL
用途
UNSAFE_NULL=YESを指定すると、標識変数を使用しないでNULLをフェッチしても、ORA-01405メッセージは生成されません。
構文
UNSAFE_NULL={YES | NO}
デフォルト値
NO
使用上の注意
インラインでは入力できません。
MODE=ORACLEの場合のみ、UNSAFE_NULL=YESを設定できます。
埋込みPL/SQLブロックのホスト変数ではUNSAFE_NULLオプションは何の効果もありません。ORA-01405エラーの発生を避けるために、必ず標識変数を使用してください。
10.5.64 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の場合、データが失われることがあります。
10.5.65 VARCHAR
用途
ある構造体がVARCHARホスト変数として解釈されるように、Pro*C/C++プリコンパイラに対して指示します。
構文
VARCHAR={NO | YES}
デフォルト値
NO
使用上の注意
コマンドラインでのみ入力できます。
VARCHAR=YESのとき、次のようにC言語の構造体を記述します。
struct { short len; char arr[n]; } name;
この場合、プリコンパイラによってVARCHAR[n]型のホスト変数として解釈されます。
VARCHARはNLS_CHARオプションとともに使用してマルチバイト文字変数を指定できます。
10.5.66 VERSION
用途
EXEC SQL OBJECT DEREF文によって戻されるオブジェクトのバージョンを指定します。
構文
VERSION={RECENT | LATEST | ANY}
デフォルト値
RECENT
使用上の注意
EXEC ORACLE OPTION文を使用してインライン入力できます。
RECENTは、現行のトランザクションでオブジェクトが選択されてオブジェクト・キャッシュに入っている場合、そのオブジェクトが戻されることを意味します。シリアライズ可能モードで実行中のトランザクションの場合、このオプションの効果はLATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。ほとんどのアプリケーションには、RECENTが適切です。
LATESTは、オブジェクトがオブジェクト・キャッシュに存在しない場合、データベースから取得されることを意味します。オブジェクト・キャッシュに存在する場合は、サーバーからリフレッシュされます。LATESTを使用する場合、ネットワークのラウンドトリップ数が最大になるため注意してください。LATESTは、オブジェクト・キャッシュとサーバーのバッファ・キャッシュをできるかぎり一致させる必要がある場合にのみ使用してください。
ANYは、オブジェクトがすでにオブジェクト・キャッシュに存在している場合、そのオブジェクトが戻されることを意味します。キャッシュになければ、そのオブジェクトはサーバーから取得します。ANYを指定すると、ネットワークのラウンドトリップ数は最小になります。この値を使用するのは、アプリケーションが読取り専用オブジェクトにアクセスする場合や、ユーザーがオブジェクトに排他的にアクセスする場合です。