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.1.1 大/小文字の区別

一般的に、プリコンパイラ・オプションの名前および値には、大文字と小文字のどちらを指定してもかまいません。ただし、UNIXのように大/小文字を区別するオペレーティング・システムの場合は、大文字および小文字を正しく組み合せて、Pro*C/C++実行ファイルの名前を含むファイル名を指定してください。

10.2 プリコンパイラのオプション

各オプションを使用すると、リソースの使用方法、エラーのレポート方法、入出力のフォーマット方法およびカーソルの管理方法を制御できます。

オプションの値はリテラルで、テキスト値または数値を表します。たとえば、次のオプションを指定するとします。

...  INAME=my_test 

この値はファイル名を指定する文字列リテラルです。

次にMAXOPENCURSORSオプションの例を示します。

...MAXOPENCURSORS=20 

この値は数値です。

一部のオプションはブール値をとり、文字列yesまたはnotrueまたは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には、includeLIBPATHなどの変数のデフォルトのパス設定が含まれています。これらのパスは、コンピュータまたはオペレーティング・システムに依存します。デフォルトのパスが、ご使用のコンピュータおよびオペレーティング・システムで有効なことを確認する必要があります。有効でない場合は、そのパスを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 オプション値の優先順位

オプションの値は、優先順位の低いものから順に、次のように決定されます。

  • プリコンパイラに組み込まれた値

  • Pro*C/C++システム構成ファイル内の値の集合

  • Pro*C/C++ユーザー構成ファイル内の値の集合

  • コマンドラインで設定される値

  • インラインで設定される値

たとえば、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.1 構成ファイル

このリリースでは、システム構成ファイルをpcscfg.cfgと呼びます。このファイルは、ORACLE_HOME\precomp\adminディレクトリにあります。

10.2.7.2 CODE

CODEオプションのデフォルト設定はANSI_Cです。他のオペレーティング・システム用のPro*C/C++では、デフォルト設定がKR_Cになっている場合があります。

10.2.7.3 DBMS

DBMS=V6_CHARは、CHAR_MAP=VARCHAR2使用時にサポートされません。かわりに、DBMS=V7を使用します。

10.2.7.4 INCLUDE

PARSE=PARTIALまたはPARSE=FULLでプリコンパイルするサンプル・プログラムの場合、c:\program files\devstudio\vc\includeのインクルード・パスが追加されています。Microsoft Visual Studioが別の場所にインストールされている場合、サンプル・プログラムで正しくプリコンパイルするために、「インクルード・ディレクトリ」フィールドを適宜変更します。

10.2.7.5 PARSE

PARSEオプションのデフォルト設定はNONEです。他のオペレーティング・システム用のPro*C/C++では、デフォルト設定がFULLになっている場合があります。

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.1 コマンドライン

プリコンパイラ・オプションをコマンドラインに入力するには、次の構文を使用します。

... [OPTION_NAME=value] [OPTION_NAME=value] ... 

それぞれのオプション=値の指定は、1つ以上の空白で区切ります。たとえば、次のように入力したとします。

... CODE=ANSI_C MODE=ANSI 

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になります。

  • SQL_ATTR_COL_PROPERTY_HAS_DOMAINは、指定された列にDOMAIN制約がある場合、colpropがtrueであることを返します。

10.5 使用状況ドメインのメタデータ・サポートについて

使用状況ドメイン(SQLドメインまたはドメインとも呼ばれる)は、既存のOracle Databaseデータ型に関連付けられたプロパティおよび注釈を保持するデータベース・オブジェクトです。アプリケーション開発者は、ドメインを使用して、特定のタイプの列の使用状況を示すことができます。Oracle Databaseでは、アプリケーションでドメインを作成して列に関連付けることができます。

関連項目:

プリコンパイラは、事前定義済関数を使用して、ドメインに関連付けられた列からドメインのメタデータまたは注釈情報を取得できます。DOMAIN構文を参照するアプリケーションは、共通フロントエンド・パーサーを使用してプリコンパイルする必要があります。次に例を示します:

proc common_parser=yes userid=scott/tiger sample10.p

次のAPI関数は、列に関連付けられたドメイン名を取得し(domainName引数)、ドメインの長さを返します(domainLen引数)。

void SQLGetDomainName(
   void  *uga,
   text  *coln,
   text  *domainName
   ub4   *domainLen);

パラメータ:

  • uga (IN) - ランタイム・コンテキスト
  • coln (IN) - 列名
  • domainName (OUT) - ドメイン名
  • domainLen (OUT) - ドメイン名の長さ

次に、例を示します。

EXEC SQL SELECT empId, empEmail FROM empTable;
strcpy("empEMail", colName);
cp = SQL_ATTR_COL_PROPERTY_HAS_DOMAIN;
SQLGetColProp(NULL, colName, &cp, colProp);
SQLColumnHasDomain(NULL, &colProp, &hasDomain);

 if (hasDomain)
  {
    SQLGetDomainName(NULL, colName, domainName, &domainLen);
    printf("column %s has domain name:%.*s\n", colName, domainLen, domainName);
  }

printf("domainName:%.*s\n", domainLen, domainName);
printf("domainLen:%d\n", domainLen);

ノート:

CAST AS DOMAIN機能はサポートされていません。たとえば:

EXEC SQL SELECT First_Name, CAST (Score AS domain domain_1) Int_Score into :nfname, :nscore FROM Student_Score;

次のエラーが返されます:

ORA-11537 CAST AS DOMAIN feature is not supported.

10.6 プリコンパイラ・オプションの使用方法について

この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。プリコンパイラ・オプションをアルファベット順に並べ、オプションごとに用途、構文およびデフォルト値を示しています。さらに「使用上のノート」で、オプションについて説明します。

10.6.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.6.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のデフォルト文字マッピングでした。

関連項目:

10.6.3 CINCR

用途

データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。

構文

CINCR = 範囲は1から(CMAX-CMIN)。

デフォルト値

1

使用上のノート

最初は、CMINにより指定されたとおりに物理接続がすべてサーバーに対してオープンされます。それ以降は、必要な場合にのみ物理接続がオープンされます。パフォーマンスを最適にするには、CMINを、アプリケーションによる実行が計画または予想される同時実行文の合計数に設定する必要があります。デフォルト値は2に設定されます。

10.6.4 CLOSE_ON_COMMIT

用途

WITH HOLD句なしで宣言されたカーソルを、コミット時にすべてクローズするかどうかを指定します。

構文

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.6.5 CMAX

用途

データベースに対してオープンできる物理接続の最大数を指定します。

構文

CINCR = 範囲は1から65535

デフォルト値

100

使用上のノート

CMAX値は、CMIN+CINCRより大きく設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、同時データベース操作を100個実行するように設定すれば十分です。ユーザーが適切な値を設定できます。

10.6.6 CMIN

用途

データベースに対してオープンできる物理接続の最小数を指定します。

構文

CINCR = 範囲は1から(CMAX-CINCR)。

デフォルト値

2

使用上のノート

CMAX値は、CMIN+CINCRより大きく設定する必要があります。この値に達すると、物理接続をそれ以上オープンできません。通常のアプリケーションでは、同時データベース操作を100個実行するように設定すれば十分です。ユーザーが適切な値を設定できます。

10.6.7 CNOWAIT

用途

この属性は、プール内の他のすべての物理接続が使用中で、物理接続の合計数がすでに最大値に達している場合に、アプリケーションで繰り返し物理接続を要求する必要があるかどうかを決定します。

構文

CNOWAIT = 範囲は1から65535。

デフォルト値

未設定を意味する0。

使用上のノート

物理接続が使用できず、これ以上物理接続をオープンできない場合、この属性が設定されているとエラーが発生します。そうでない場合、コールは別の接続が取得されるまで待機します。デフォルトでは、CNOWAITは設定されないため、スレッドは、エラーを戻すかわりに、空いている接続を取得できるまで待機します。

10.6.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.6.9 COMMON_PARSER

用途

SQL99構文のSELECT、INSERT、DELETE、UPDATEおよびDECLARE CURSOR文のカーソル本体がサポートされます。

構文

COMMON_PARSER={YES | NO}

デフォルト値

NO

使用上のノート

コマンドラインで入力できます。

10.6.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.6.11 CONFIG

用途

ユーザー構成ファイルの名前を指定します。

構文

CONFIG=filename

デフォルト値

なし。

使用上のノート

コマンドラインでのみ入力できます。

ユーザー構成ファイルの名前および位置をPro*C/C++に通知する方法は、このオプション以外にありません。

10.6.12 CPOOL

用途

このオプションに基づき、プリコンパイラでは、SQLLIBに接続プール機能を有効または無効にするように指示する適切なコードを生成します。

構文

CPOOL = {YES|NO}

デフォルト値

NO

使用上のノート

このオプションがNOに設定されている場合、プリコンパイラではその他の接続プーリング・オプションを無視します。

10.6.13 CPP_SUFFIX

用途

CPP_SUFFIXオプションを使用すると、CODE=CPPオプションを指定した場合に生成されるC++出力ファイルに、プリコンパイラによって付けられるファイル拡張子を指定できます。

構文

CPP_SUFFIX=filename_extension

デフォルト値

システム固有。

使用上のノート

ほとんどのCコンパイラでは、入力ファイルのデフォルト拡張子は.cになります。しかし、C++コンパイラでは、ファイル名の拡張子がコンパイラごとに異なる場合があります。CPP_SUFFIXオプションを指定すると、プリコンパイラで生成されるファイル名拡張子を指定できます。このオプションの値は、引用符もピリオドも付けない文字列です。たとえば、CPP_SUFFIX=ccまたはCPP_SUFFIX=Cのように指定します。

10.6.14 CTIMEOUT

用途

指定した時間(秒単位)より長い間アイドル状態になっている物理接続を終了し、オープンされている物理接続を最適な数に保ちます。

構文

CTIMEOUT = 範囲は1から65535。

デフォルト値

未設定を意味する0。

使用上のノート

接続プールが終了されるまで、物理接続はクローズされません。新しい物理接続を作成すると、サーバーへのラウンド・トリップが必要になります。

10.6.15 DB2_ARRAY

用途

このオプションに基づいて、プリコンパイラは追加の配列INSERTおよび配列SELECT構文をアクティブにします。

構文

DB2_ARRAY={YES |NO}

デフォルト値

NO

使用上のノート

このオプションをNOに設定すると、Oracleプリコンパイラの構文がサポートされます。それ以外の場合は、DB2の配列INSERTおよび配列SELECT構文がサポートされます。

10.6.16 DBMS

用途

OracleがOracle9i、Oracle8i、Oracle8、Oracle7、あるいはOracleのネイティブ・バージョン(つまり、アプリケーションが接続しているバージョン)のうち、どの意味上および構文上の規則に従うかを指定します。

構文

DBMS=NATIVE | V7 | V8

デフォルト値

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.6.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.6.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.6.19 DURATION

用途

後続のEXEC SQL OBJECT CREATE文とEXEC SQL OBJECT DEREF文に使用される確保継続時間を設定します。キャッシュ内のオブジェクトは、保持期間の終わりに暗黙的に解放されます。

構文

DURATION={TRANSACTION | SESSION}

デフォルト値

TRANSACTION

使用上のノート

EXEC ORACLE OPTION文を使用してインライン入力できます。

TRANSACTIONは、オブジェクトがトランザクションの完了時に暗黙的に解放されることを意味します。

SESSIONは、オブジェクトが接続の終了時に暗黙的に解放されることを意味します。

10.6.20 DYNAMIC

用途

このマイクロ・オプションでは、動的SQL方法4の記述子の動作を指定します。MODEの設定によりDYNAMICの設定が決まります。

構文

DYNAMIC={ORACLE | ANSI}

デフォルト値

ORACLE

使用上のノート

EXEC ORACLE OPTION文を使用してインラインで入力することはできません。

DYNAMICオプションの設定については、「ANSI動的SQLのプリコンパイラ・オプション」を参照してください。

10.6.21 ERRORS

用途

エラー・メッセージを端末とリスト・ファイルの両方に送信(YES)するか、リスト・ファイルにのみ送信(NO)するかを指定します。

構文

ERRORS={YES | NO}

デフォルト値

YES

使用上のノート

コマンドラインまたは構成ファイルでのみ入力できます。

10.6.22 ERRTYPE

用途

型ファイルの処理中に生成されたエラーを書き込む出力ファイルを指定します。省略すると、エラーは画面に出力されます。

構文

ERRTYPE=filename

デフォルト値

なし。

使用上のノート

生成されるエラー・ファイルは1つのみです。複数の値を入力すると、最後の値がプリコンパイラで使用されます。

関連項目

10.6.23 EVENTS

用途

アプリケーションが通知の登録および受信に対応しているかどうかを指定します。

構文

EVENTS={YES | NO}

デフォルト値

NO

使用上のノート

コマンドラインからのみ入力できます。

10.6.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.6.25 HEADER

用途

プリコンパイル済ヘッダー・ファイルを許可します。プリコンパイル済ヘッダー・ファイルのファイル拡張子を指定します。

構文

HEADER=extension

デフォルト値

なし

使用上のノート

ヘッダー・ファイルをプリコンパイルする場合、このオプションは必須で、ヘッダー・ファイルのプリコンパイルによって生成される出力ファイルのファイル拡張子の指定に使用されます。

通常のPro*C/C++プログラムをプリコンパイルする場合、このオプションは任意です。指定すると、Pro*C/C++プログラムのプリコンパイル時に、プリコンパイル済ヘッダーのメカニズムを使用できます。

どちらの場合も、このオプションで#includeディレクティブの処理時に使用するファイル拡張子も指定できます。指定した拡張子の付いた#includeファイルが存在する場合、Pro*C/C++ではそのファイルをPro*C/C++によって以前に生成されたプリコンパイル済ヘッダー・ファイルとみなします。Pro*C/C++は、#includeディレクティブを処理してインクルードされるヘッダー・ファイルをプリコンパイルするかわりに、そのファイルからデータをインスタンス化します。

このオプションは、コマンドラインまたは構成ファイルでのみ使用できます。インラインでは使用できません。このオプションを使用する場合は、ファイル拡張子のみを指定します。ファイル・セパレータは含めないでください。たとえば、拡張子にピリオド(.)は含めないでください。

10.6.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.6.27 IMPLICIT_SVPT

用途

新しくバッチ処理された挿入を開始する前に、暗黙的なセーブポイントを設定するかどうかを制御します。

構文

implicit_svpt={YES|NO}

デフォルト値

NO

使用上のノート

implict_svpt=yesの場合、行の新しいバッチの開始前に、セーブポイントが設定されます。挿入時にエラーが発生すると、暗黙的な「セーブポイントへのロールバック」が実行されます。このオプションは、DB2との互換性のために用意されていますが、余分なラウンドトリップとなるためマイナス面であることは明らかです。

implict_svpt=noの場合、暗黙的セーブポイントは設定されません。バッファ済INSERTでエラーが発生すると、アプリケーションに通知されますが、ロールバックは実行されません。

10.6.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.6.29 INCLUDE

用途

#includeまたはEXEC SQL INCLUDEディレクティブによって取り込まれるファイルのディレクトリ・パスを指定します。

構文

INCLUDE=pathnameまたはINCLUDE=(path_1,path_2,...,path_n)

デフォルト値

Pro*C/C++にインクルードするカレント・ディレクトリおよびパス

使用上のノート

インラインまたはコマンドラインで入力できます。

INCLUDEは、インクルードされたファイルに対するディレクトリ・パスを指定するために使用します。プリコンパイラでは、次の順序でディレクトリが検索されます。

  1. カレント・ディレクトリ

  2. SYS_INCLUDEプリコンパイラ・オプションに指定されているシステム・ディレクトリ

  3. INCLUDEオプションで指定された入力順のディレクトリ

  4. 標準ヘッダー・ファイル用の組込みディレクトリ

通常、Oracle固有のヘッダー・ファイルsqlca.hsqlda.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.6.30 INTYPE

用途

OTTで生成された型のファイルを1つ以上指定します(アプリケーションでオブジェクト型が使用される場合にのみ必要です)。

構文

INTYPE=(file_1,file_2,...,file_n)

デフォルト値

なし。

使用上のノート

Pro*C/C++コードには、オブジェクト型ごとに1つの型のファイルが存在します。

10.6.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.6.32 LNAME

用途

リスト・ファイル名を指定します。

構文

LNAME=filename

デフォルト値

なし。

使用上のノート

コマンドラインでのみ入力できます。

リスト・ファイルのデフォルトのファイル名の拡張子は.lisです。

10.6.33 LTYPE

用途

生成されるリスト・ファイルの型を指定します。

構文

LTYPE={NONE | SHORT | LONG}

デフォルト値

SHORT

使用上のノート

コマンドラインまたは構成ファイルで入力できます。

リスト・ファイル生成時のデフォルトの形式はLONGです。LTYPE=LONGを指定すると、すべてのソース・コードが解析順に出力されます。また、メッセージも生成順に出力されます。さらに、現在有効なPro*C/C++オプションが出力されます。

LTYPE=SHORTを指定すると、生成されたメッセージのみが出力され、ソース・コードは出力されません。ソース・ファイルへの参照行はメッセージ状態を生成したコードの位置を特定するのに役立ちます。

LTYPE=NONEを指定すると、LNAMEオプションでリスト・ファイル名を明示的に指定しないかぎり、リスト・ファイルは作成されません。後者の場合、リスト・ファイルはLTYPE=LONGを想定して生成されます

10.6.34 MAX_ROW_INSERT

用途

INSERT文の実行前にバッファする必要がある行の数を制御します。

構文

max_row_insert={0から1000}

デフォルト値

0

使用上のノート

0よりも大きい任意の値を指定すると、バッファ済INSERT機能が有効化され、INSERT文の実行前に多くの行がバッファされます。

10.6.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.6.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.6.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.6.38 NATIVE_TYPES

用途

ネイティブfloat/doubleをサポートします。

構文

NATIVE_TYPES = {YES|NO}

デフォルト値

NO

使用上のノート

ネイティブfloatおよびネイティブdoubleデータ型は、単精度と倍精度の浮動小数点値を表します。これらはネイティブ、つまりホスト・システムの浮動小数点形式で表されます。

10.6.39 NLS_CHAR

用途

プリコンパイラでマルチバイト文字変数として扱われるCホスト文字変数を指定します。

構文

NLS_CHAR=varnameまたはNLS_CHAR=(var_1,var_2,...,var_n)

デフォルト値

なし。

使用上のノート

コマンドラインまたは構成ファイルでのみ入力できます。

このオプションを使用すると、プリコンパイラでマルチバイト文字変数として扱う必要のある1つ以上のホスト変数のリストを、プリコンパイル時に指定できます。このオプションでは、C言語のchar変数またはPro*C/C++のVARCHAR変数のみを指定できます。

オプション・リストにプログラムで宣言していない変数を指定しても、プリコンパイラのエラーは発生しません。

10.6.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.6.41 OBJECTS

用途

オブジェクト型のサポートを要求します。

構文

OBJECTS={YES | NO}

デフォルト値

YES

使用上のノート

コマンドラインからのみ入力できます。

10.6.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.6.43 ORACA

用途

プログラムでOracle通信領域(ORACA)を使用できるかどうかを指定します。

構文

ORACA={YES | NO}

デフォルト値

NO

使用上のノート

インラインまたはコマンドラインで入力できます。

ORACA=YESのときは、プログラムにEXEC SQL INCLUDE ORACA文または#include oraca.h文を記述する必要があります。

10.6.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.6.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.6.46 PAGELEN

用途

リスト・ファイルの物理ページごとの行数を指定します。

構文

PAGELEN=integer

デフォルト値

80

使用上のノート

インラインでは入力できません。値の許容範囲は30から256です。

10.6.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.6.48 PLAN_BASELINE

用途

モジュール名を指定してSQL計画ベースラインを作成します。

構文

PLAN_BASELINE={module_name | YES | NO}

デフォルト値

NO

使用上のノート

このモジュール名の後にファイル名、ファイル・タイプおよび順序番号が付いて、一意の計画名が生成されます。

ノート:

計画ベースラインのSQL文を生成して実行するには、DBMS_SPM_INTERNALパッケージに対するExecute権限と、Administer SQL Management Object権限が必要です。

計画ベースラインのオプションは、SQLCHECK=FULLを指定した場合のみ有効です。これを指定せずにこれらのオプションを使用した場合、オプションは無視され、そのオプションを使用するにはSQLCHECK=FULLのみを指定する必要があることを示す警告がスローされます。

10.6.49 PLAN_PREFIX

用途

計画名が128バイト以内であることを確認します。

構文

PLAN_PREFIX={prefix_name| none}

デフォルト値

なし

使用上のノート

これはオプションです。デフォルトはnoneで、接頭辞名が使用されないことを意味し、計画名が128バイトを超えるとエラー・メッセージが生成されます。

10.6.50 PLAN_RUN

用途

生成されたSQLファイルを実行します。

構文

PLAN_RUN={YES | NO}

デフォルト値

NO

使用上のノート

PLAN_RUNオプションを設定しない場合、生成されるSQLファイルは実行されません。

10.6.51 PLAN_FIXED

用途

作成した計画ベースラインが固定であるか、非固定であるかを指定します。

構文

PLAN_FIXED={ YES | NO }

デフォルト値

YES

使用上のノート

NOを設定すると、非固定の計画ベースラインが作成されます。

10.6.52 PLAN_ENABLED

用途

作成された計画ベースラインの使用を有効にします。

構文

PLAN_ENABLED={ YES | NO }

デフォルト値

YES

使用上のノート

デフォルトの設定では、計画の選択時に、作成された計画ベースラインが使用されます。NOを設定すると、計画ベースラインが作成されますが、手動で有効にするまで使用されません。

10.6.53 MEMFORPREFETCH

用途

このオプションを使用すると、指定したメモリーに格納可能な行数をプリフェッチすることによって、問合せが高速化します。

構文

MEMFORPREFETCH=integer

デフォルト値

値は設定されていません。

使用上のノート

このオプションは、構成ファイルまたはコマンドラインで使用できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。

インラインで使用するときは、明示カーソルを使用し、OPEN文の前に配置する必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインMEMFORPREFETCHオプションによって決まります。

MEMFORPREFETCHは、デフォルトでは値が設定されていません。プリフェッチをオフにするには、コマンドラインでMEMFORPREFETCH=0を使用します。

LONG列およびLOB列へのアクセス中もプリフェッチはオフになります。MEMFORPREFETCHを使用すると、単一行フェッチのパフォーマンスが向上します。配列フェッチを実行する場合、MEMFORPREFETCHの値は割り当てた値に関係なく無効になります。

アプリケーションにおけるすべてのフェッチを支援できる完全なプリフェッチ・メモリー値はありません。

したがって、MEMFORPREFETCHオプションを使用する場合は、様々な値をテストし、プログラム内のすべての文にわたってパフォーマンスが向上する値を選択してください。いくつかの文を個別にチューニングする必要がある場合は、EXEC ORACLE OPTIONを使用してMEMFORPREFETCHオプションをインラインで指定します。この操作は、このコマンドの後のすべてのフェッチ文に影響を与えます。特定のFETCH文のパフォーマンスが向上するようにプリフェッチ・メモリーを選択してください。この個別プリフェッチ・カウントを実現するには、(コマンドラインからではなく)インラインのプリフェッチ・オプションを指定します。

10.6.54 PREFETCH

用途

任意の行数を事前に取得して問合せの実行速度を向上させます。

構文

PREFETCH=integer

デフォルト値

1

使用上のノート

構成ファイルまたはコマンドラインで入力できます。優先順位の規則に従い、明示カーソルを使用するすべての問合せの実行に、整数の値が使用されます。

インラインで使用する場合、明示カーソルのあるOPEN文の前に置く必要があります。OPEN文が実行されたときにプリフェッチされる行数は、有効な最後のインラインPREFETCHオプションによって決まります。

指定可能な値の範囲は0から65535です。

10.6.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.6.56 RUNOUTLINE

用途

プリコンパイラを使用して、または後で開発者が手動で「CREATE OUTLINE」文を実行するオプションを提供します。

構文

runoutline={yes | no}

デフォルト値

no

使用上のノート

runoutline=yesの場合は、プリコンパイルが正常に完了した後で、プリコンパイラ/トランスレータによって、生成された「CREATE OUTLINE」文が実行されます。

RUNOUTLINEを使用する場合は、アウトライン・オプションをtrueまたはcategory_nameに設定する必要があります。このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。

10.6.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.6.58 STMT_CACHE

用途

動的SQL文の文キャッシュ・サイズを指定します。

構文

STMT_CACHE = 0から65535

デフォルト値

0

使用上のノート

stmt_cacheオプションを設定すると、アプリケーションでそれぞれの動的SQL文の予測数を保持できます。

10.6.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ディレクティブを付けて、挿入する必要があります。)

プリコンパイラでは、次の順序でディレクトリが検索されます。

  1. カレント・ディレクトリ

  2. SYS_INCLUDEプリコンパイラ・オプションで指定されたシステム・ディレクトリ

  3. INCLUDEオプションで指定されたディレクトリ(入力順)

  4. 標準ヘッダー・ファイル用の組込みディレクトリ

ステップ3があるため、通常はsqlca.hsqlda.hなどの標準ヘッダー・ファイルのディレクトリ・パスを指定する必要はありません。

SYS_INCLUDEオプションを使用してディレクトリ・パスを指定する構文は、システムによって異なります。各オペレーティング・システムの規則に従ってください。

ノート:

SYS_INCLUDEオプションの場合、オプション値の優先順位が逆になります。値が上書きされる他のオプションとは異なり、SYS_INCLUDEは次の場所で指定されたすべてのディレクトリ・ファイルを追加します。

  • プリコンパイラ

  • Pro*C/C++システム構成ファイル

  • Pro*C/C++ユーザー構成ファイル

  • コマンドライン

  • インライン

ただし、カッコ内またはカッコなしでの値の渡し方には違いがあります。カッコ内で単一の値またはディレクトリ・リストを渡す場合、SYS_INCLUDEの既存の値は上書きされます。リストをカッコなしの単純な値として渡す場合、既存の値に追加されます。

10.6.60 THREADS

用途

THREADS=YESの場合、プリコンパイラではコンテキスト宣言を検索します。

構文

THREADS={YES | NO}

デフォルト値

NO

使用上のノート

インラインでは入力できません。

マルチスレッド・サポートを必要とするプログラムには、すべてこのオプションを指定する必要があります。

THREADS=YESの場合、最初のコンテキストが現れ、実行SQL文が見つかる前にEXEC SQL CONTEXT USEディレクティブが検出されないと、プリコンパイラではエラーが発生します。

10.6.61 TYPE_CODE

用途

このマイクロ・オプションは、動的SQL方法4でANSIまたはOracleのいずれのデータ型コードを使用するかを指定します。この設定は、MODEオプションの設定と同じです。

構文

TYPE_CODE={ORACLE | ANSI}

デフォルト値

ORACLE

使用上のノート

インラインでは入力できません。

設定できるオプションの詳細は、 表14-3を参照してください。

10.6.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.6.63 USERID

用途

Oracleユーザー名およびパスワードを指定します。

構文

USERID=username/password[@dbname]

デフォルト値

なし。

使用上のノート

コマンドラインでのみ入力できます。

動接続機能を使用している場合は、このオプションを指定しないでください。自動接続機能では、先頭にCLUSTER$の付いたOracleユーザー名しか受け付けません。「CLUSTER$」文字列の実際の値は、INIT.ORAファイルのパラメータとして設定されています。

SQLCHECK=SEMANTICSのとき、Oracleに接続してデータ・ディクショナリにアクセスしてプリコンパイラに必要な情報を取得させるには、USERIDも同時に指定する必要があります。

10.6.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.6.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.6.66 VERSION

用途

EXEC SQL OBJECT DEREF文によって戻されるオブジェクトのバージョンを指定します。

構文

VERSION={RECENT | LATEST | ANY}

デフォルト値

RECENT

使用上のノート

EXEC ORACLE OPTION文を使用してインライン入力できます。

RECENTは、現行のトランザクションでオブジェクトが選択されてオブジェクト・キャッシュに入っている場合、そのオブジェクトが戻されることを意味します。シリアライズ可能モードで実行中のトランザクションの場合、このオプションの効果はLATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。ほとんどのアプリケーションには、RECENTが適切です。

LATESTは、オブジェクトがオブジェクト・キャッシュに存在しない場合、データベースから取得されることを意味します。オブジェクト・キャッシュに存在する場合は、サーバーからリフレッシュされます。LATESTを使用する場合、ネットワークのラウンドトリップ数が最大になるため注意してください。LATESTは、オブジェクト・キャッシュとサーバーのバッファ・キャッシュをできるかぎり一致させる必要がある場合にのみ使用してください。

ANYは、オブジェクトがすでにオブジェクト・キャッシュに存在している場合、そのオブジェクトが戻されることを意味します。キャッシュになければ、そのオブジェクトはサーバーから取得します。ANYを指定すると、ネットワークのラウンドトリップ数は最小になります。この値を使用するのは、アプリケーションが読取り専用オブジェクトにアクセスする場合や、ユーザーがオブジェクトに排他的にアクセスする場合です。