各オプションを使用すると、リソースの使用方法、エラーのレポート方法、入出力のフォーマット方法およびカーソルの管理方法を制御できます。
オプションの値はリテラルで、テキスト値または数値を表します。たとえば、次のオプションを指定するとします。
... 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
には、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=は有効ではありません。
オプションの値は、優先順位の低いものから順に、次のように決定されます。
たとえば、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のような短いサマリーが表示されます。
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は主なプリコンパイラ・オプションのクイック・リファレンスです。受入れ可能でも効力を持たないオプションは、この表には記載されていません。
関連項目:
メッセージについては、『Oracle Databaseエラー・メッセージ』 を参照してください。
プリコンパイル・ユニットは、Cコードと1つ以上の埋込みSQL文を含むファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのプリコンパイル・ユニットにのみ効力を持ちます。たとえば、ユニットAに対してHOLD_CURSOR=YESおよびRELEASE_CURSOR=YESを指定し、ユニットBには指定しなければ、ユニットAのSQL文はこれらのHOLD_CURSOR値およびRELEASE_CURSOR値を使用して実行されますが、ユニットBのSQL文はデフォルト値を使用して実行されます。