日本語PDF

6 Oracleプリコンパイラの実行

この章は、次の項で構成されています。

この章では、Oracleプリコンパイラを実行するための要件について詳しく説明します。プリコンパイル中に何が起こるか、プリコンパイラ・コマンドを発行する方法、多くの便利なプリコンパイラ・オプションを指定する方法、条件付きプリコンパイルと分割プリコンパイルの実行方法について学習します。

6.1 プリコンパイラのコマンド

Oracleプリコンパイラを実行するには、表6-1に示す言語固有のコマンドの1つを発行します。

表6-1 プリコンパイラの実行コマンド

ホスト言語 プリコンパイラのコマンド

COBOL

procob

FORTRAN

profor

プリコンパイラの場所はシステムごとに異なります。通常、システム管理者またはデータベース管理者は、環境変数、論理名または別名を定義するか、その他のシステム固有の方法を使用して、プリコンパイラ実行ファイルをアクセス可能にします。

INAMEオプションは、プリコンパイル対象のソースファイルを指定します。たとえば、次のPro*COBOLコマンドを入力します。

procob INAME=test

すると、カレント・ディレクトリのtest.pcoファイルがプリコンパイルされますが、これはプリコンパイラではファイル名の拡張子が.pcoとみなされるためです。非標準の拡張子でなければ、INAMEを指定する際にファイル拡張子を使用する必要はありません。

入力ファイル名および出力ファイル名を、それぞれのオプション名INAMEおよびONAMEとともに指定する必要はありません。オプション名を指定しない場合、プリコンパイラではコマンドラインで最初に指定したファイル名を入力ファイル名、2番目のファイル名を出力ファイル名とみなします。

Pro*FORTRANコマンドを次のように入力したとします。

profor MODE=ANSI myfile.pfo DBMS=V7 myfile.f

これは次に相当します。

profor MODE=ANSI INAME=myfile.pfo DBMS=V7 ONAME=myfile.f

ノート:

特定のオペレーティング・システム・オブジェクト(ファイル名など)の名前を指定しないオプション名とオプション値には、大文字と小文字の区別はありません。このマニュアルの例では、オプション名は大文字で記述し、オプション値は通常小文字で記述しています。プリコンパイラ実行ファイル自体の名前も含め、ファイル名を入力するときには、大文字と小文字の区別は、オペレーティング・システムの表記規則に従ってください。

6.2 プリコンパイル中の状況

プリコンパイル中、ホスト・プログラムに埋め込まれたSQL文は、Oracleプリコンパイラが生成するホスト言語コードに置き換えられます。生成されたコードには、各ホスト変数のデータ型、長さおよびアドレスを含むデータ構造体と、Oracleランタイム・ライブラリのSQLLIBで必要なその他の情報が含まれています。このコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。

生成されたコードには、埋込みSQLの動作を実行するSQLLIBルーチンに対するコールも含まれています。プリコンパイラでは、Oracle Call Interface(OCI)ルーチンに対するコールは生成されないので注意してください。

プリコンパイラでは、Oracle Call Interface(OCI)に対するコールは生成されません

プリコンパイラは警告やエラー・メッセージを発行することがあります。これらのメッセージには接頭辞PCC-が付いており、『Oracle Databaseエラー・メッセージ』で説明されています。

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

プリコンパイル時には数多くの便利なオプションを使用できます。それらを使用して、リソースの使用、エラーの報告、入出力の書式化およびカーソルの管理を制御できます。コンパイラ・オプションを指定するには、次の構文を使用します。

<option_name>=<value>

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

... INAME=my_test

ここでは、値はファイル名を指定する文字列リテラルです。しかし、次のオプションの場合は違います。

... MAXOPENCURSORS=20

この値は数値です。

オプションの中にはブール値をとるものもあり、文字列のYESまたはNO、TRUEまたはFALSE、整数リテラルの1または0を指定できます。たとえば、次のオプションを指定するとします。

... SELECT_ERROR=YES

これは次に相当します。

... SELECT_ERROR=TRUE

または

... SELECT_ERROR=1

オプション名とオプション値の間には必ず等号を入れ、空白により個々のオプションが区切られるため、等号の前後には空白を入れません。たとえば、コマンドラインで次のようにAUTO_CONNECTオプションを指定するとします。

... AUTO_CONNECT=YES

省略が一義的であるならば、オプション名を省略してもかまいません。たとえば、省略形のMAXは、MAXLITERALまたはMAXOPENCURSORSのいずれの略語とも考えられるので、使用できません。

プリコンパイラのオプションについては、オンラインで便利なリファレンスを利用できます。オンラインの表示を見るには、オペレーティング・システムのプロンプトで、プリコンパイラ・コマンドを引数を指定せずに入力します。オンライン画面には、各オプションの名前および、構文、デフォルト値および用途が表示されます。アスタリスク(*)の付いたオプションは、インラインでもコマンドラインでも指定できます。

6.3.1 デフォルト値

多くのオプションにはデフォルト値があり、次の値によって決まります。

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

  • システム構成ファイルで設定された値

  • ユーザー構成ファイルで設定された値

  • インライン指定で設定された値セット

たとえば、MAXOPENCURSORSオプションでは、キャッシュ内のオープン・カーソルの最大数を指定します。このオプションのプリコンパイラに組み込まれたデフォルト値は10です。ただし、システム構成ファイルでMAXOPENCURSORS=32と指定されていると、デフォルトは32になります。ユーザー構成ファイルでは、これをさらに別の値に設定でき、これはシステム構成ファイルの値より優先されます。

次に、このオプションがコマンドラインで設定された場合、新しいコマンドライン値が優先されます。最終的には、インライン指定が前述のすべてのデフォルト値よりも優先されます。詳細は、「構成ファイル」を参照してください。

6.3.2 現在の値の確認

コマンドラインで疑問符(?)を使用すると、複数のオプションのカレント値を対話形式で調べることができます。たとえば、次のPro*COBOLコマンドを発行するとします。

procob ?

すべてのオプションの設定およびそのカレント値が端末に表示されます。この場合、値はプリコンパイラに組み込まれているもので、システム構成ファイルに値があれば、それが優先されます。一方、次のコマンドを発行したとします。

procob CONFIG=my_config_file.cfg ?

これでカレント・ディレクトリにmy_config_file.cfgというファイルがあると、my_config_file.cfgファイルのオプションが、その他のデフォルト値とともに表示されます。不足している値はユーザー構成ファイル内の値によって補われ、これらの値はプリコンパイラに組み込まれている値や、システム構成ファイルで指定されている値に優先します。

オプション名を指定し、その後に次の例のように=?を付ければ、1つのオプションの現在の値を確認できます。

procob MAXOPENCURSORS=?

ノート:

一部のオペレーティング・システムでは、疑問符(?)の前にバックスラッシュなどのエスケープ文字を付ける必要がある場合があります。たとえば、Pro*COBOLオプションの設定値を表示するには、「procob ?」のかわりに、「procob \?」を使用する必要があります。

6.3.3 大文字と小文字の区別

一般に、コマンドライン・オプションの名前および値には、大文字と小文字のどちらも使用できます。しかし、UNIXのように大文字と小文字を区別するオペレーティング・システムの場合、プリコンパイラ実行ファイルの名前を含め、ファイル名の値は大文字と小文字の正しい組合せを使用して指定する必要があります。

6.3.4 構成ファイル

構成ファイルは、プリコンパイラ・オプションを格納するテキスト・ファイルです。ファイルのそれぞれのレコード(行)には、1つのオプションおよび対応付けられた値が入ります。たとえば、構成ファイルに次のような行が入っているとします。

FIPS=YES
MODE=ANSI

これらにより、FIPSオプションとMODEオプションのデフォルト値が設定されます。

システムにはそれぞれ1つの構成ファイルがあります。システム構成ファイルの名前はプリコンパイラ固有で、表6-2に示すとおりです。

表6-2 システム構成ファイル

プリコンパイラ 構成ファイル

Pro*COBOL

pcbcfg.cfg

Pro*FORTRAN

pccfor.cfg

システム構成ファイルの位置はオペレーティング・システムによって異なります。ほとんどのUNIXシステムでは、Pro*COBOLの構成ファイルは通常$ORACLE_HOME/procobディレクトリにあり、Pro*FORTRANの構成ファイルは$ORACLE_HOME/proforディレクトリにあります($ORACLE_HOMEはデータベース・ソフトウェアの環境変数です)。

プリコンパイラの各ユーザーは、1つ以上のユーザー構成ファイルを持つことができます。構成ファイルの名前は、CONFIGコマンドライン・オプションを使用して指定します。詳細は、「現在の値の確認」を参照してください。

ノート:

構成ファイルはネストできません。CONFIGは、構成ファイル内では有効なオプションではありません。

6.4 オプションの入力

どのプリコンパイラ・オプションも、コマンドラインや(CONFIG以外は)構成ファイルから入力できます。また、インラインで入力できるオプションも多数あります。プリコンパイラでは実行時に、これら3つのソースすべてから入力されたオプションを受け入れます。

6.4.1 コマンドライン

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

... [option_name=value] [option_name=value] ...

オプションとオプションの間は、1つ以上の空白で区切ります。たとえば、次のようにオプションを入力できます。

... ERRORS=no LTYPE=short

6.4.2 インライン

EXEC ORACLE文を記述して、インラインでオプションを入力するには、次の構文を使用します。

EXEC ORACLE OPTION (option_name=value);

たとえば、次のような文をコーディングできます。

EXEC ORACLE OPTION (RELEASE_CURSOR=YES);

インラインでオプションを入力すると、コマンドラインから入力された同じオプションは無効になります。

6.4.3 長所

EXEC ORACLE機能は、プリコンパイル中にオプションを変更するときに特に便利です。たとえば、HOLD_CURSORRELEASE_CURSORの値を文ごとに変更できます。インライン・オプションを使用して実行時のパフォーマンスを最適化する方法については、パフォーマンス・チューニングを参照してください。

インラインでのオプションの指定は、オペレーティング・システムでコマンドラインでの入力文字数が制限されている場合にも便利であり、インライン・オプションは構成ファイルに格納できます(これについては次の項で説明します)。

6.4.4 EXEC ORACLEのスコープ

EXEC ORACLE文は、同じオプションを指定する別のEXEC ORACLE文によって指定値(テキスト)が変更されるまで有効です。たとえば、HOLD_CURSOR=NOは、HOLD_CURSOR=YES:が指定されるまで有効です。

EXEC SQL BEGIN DECLARE SECTION;
 emp_name CHARACTER(20);
 emp_number INTEGER;
 salary REAL;
 dept_number INTEGER;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL WHENEVER NOT FOUND GOTO no_more;
EXEC ORACLE OPTION (HOLD_CURSOR=NO);
EXEC SQL DECLARE emp_cursor CURSOR FOR
 SELECT EMPNO, DEPTNO FROM EMP;
EXEC SQL OPEN emp_cursor;
display 'Employee Number Dept';
display '--------------- ----';
LOOP
 EXEC SQL FETCH emp_cursor INTO :emp_number, :dept_number; 
 display emp_number, dept_number;
ENDLOOP;
no_more:
 EXEC SQL WHENEVER NOT FOUND CONTINUE; 
 LOOP
 display 'Employee number? ';
 read emp_number;
 IF emp_number = 0 THEN
 exit loop;
 EXEC ORACLE OPTION (HOLD_CURSOR=YES);
 EXEC SQL SELECT ENAME, SAL
 INTO :emp_name, :salary
 FROM EMP
 WHERE EMPNO = :emp_number; 
 display 'Salary for ', emp_name, ' is ', salary;
 ENDLOOP;
...

6.4.5 構成ファイル

Oracleプリコンパイラでは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。デフォルトでは、システム構成ファイルと呼ばれるテキスト・ファイルが使用されます。ただし、コマンドラインでは、ユーザー構成ファイルと呼ばれるいくつかの代替ファイルを指定できます。

6.4.6 長所

構成ファイルにはいくつかの利点があります。システム構成ファイルを使用すると、すべてのプロジェク用にオプション・セットを標準化できます。ユーザー構成ファイルを使用すると、プロジェクトごとにオプションのセットをカスタマイズできます。構成ファイルにより、コマンドラインでオプションの長い文字列を入力する必要がなくなります。また、システムでコマンドラインの長さが制限されている場合、構成ファイルを使用すれば、コマンドラインで入力できるより多くのオプションを指定できます。

6.4.7 構成ファイルの使用について

構成ファイル内の各レコード(行)には、コマンドライン・オプションが1つ入っています。たとえば、構成ファイルには、FIPSMODEおよびSQLCHECKの各オプションのデフォルト値を設定する次の行が含まれている場合があります。

FIPS=YES
MODE=ANSI
SQLCHECK=SEMANTICS

Oracleプリコンパイラごとに、独自のシステム構成ファイルを設定できます。ファイルの名前や場所は、言語やシステム固有です。ファイルが見つからない場合、警告が表示されますが、プリコンパイラでは処理が続行されます。

1つの言語にはシステム構成ファイルが1つしかありませんが、ユーザー構成ファイルはいくつでも作成できます。特定のユーザー構成ファイルの名前と場所を指定するには、新しいコマンドライン・オプションCONFIGを次のように指定します。

... CONFIG=<filename>

構成ファイルはネストできません。したがって、構成ファイルでCONFIGオプションは指定できません。また、インラインでCONFIGを指定することもできません。

6.4.8 オプション値の設定について

多くのプリコンパイラのランタイム・オプションには、デフォルト値が組み込まれており、これらは構成ファイルまたはコマンドラインでリセットできます。コマンドラインの設定は、ユーザー構成ファイルの設定に優先し、ユーザー構成ファイルの設定は、システム構成ファイルの設定に優先します。

6.5 オプションの有効範囲

プリコンパイル・ユニットは、ホスト言語のコードと1つ以上の埋込みSQL文を含むファイルです。特定のプリコンパイル・ユニットに対して指定したオプションは、そのプリコンパイル・ユニットにのみ効力を持ちます。

たとえば、単位AにHOLD_CURSOR=YESおよびRELEASE_CURSOR=YESを指定し、単位Bには指定しなかった場合、単位AのSQL文は指定したHOLD_CURSORおよびRELEASE_CURSORの値で実行されますが、単位BのSQL文はデフォルト値で実行されます。ただし、Oracleに接続すると有効になるMAXOPENCURSORS設定は、その接続が続くかぎり有効です。

インライン・オプションの有効範囲は、論理的なものではなく、位置的なものです。つまり、インライン・オプションの影響を受けるのは、プログラム・ロジックの流れでそのインライン・オプションの後にくるSQL文ではなく、ソース・ファイル内でそのインライン・オプションの後に記述されているSQL文です。オプションの設定は、そのオプションを再指定しないかぎり、ファイルの終わりまで有効です。

6.6 クイック・リファレンス

表6-3は、プリコンパイラ・オプションのクイック・リファレンスです。アスタリスクの付いたオプションは、インラインで入力できます。

また、オンラインでも簡単な参照ができます。オンライン・リファレンスを表示するには、オペレーティング・システムのプロンプトでオプションを指定せずにプリコンパイラ・コマンドを入力します。画面には、各オプションの名前、構文、デフォルト値および用途が表示されます。

プラットフォーム固有のオプションもいくつかあります。たとえば、MicroFocus COBOLを使用するバイトスワップ・プラットフォームでは、COMP5オプションによって、一部のCOMPUTATIONAL項目の使用が管理されます。使用しているシステム固有のOracleマニュアルを参照してください。

表6-3 プリコンパイラのオプション・クイック・リファレンス

構文 デフォルト値 指定内容

ASACC={YES|NO}

NO

リストのキャリッジ制御

ASSUME_SQLCODE={YES|NO}

NO

プリコンパイラではSQLCODEが宣言されているとみなします。

AUTO_CONNECT={YES|NO}

NO

自動接続

CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF} *

CHARZ

文字配列および文字列のマップ

CHARSET_PICN={NCHAR_CHARSET | DB_CHARSET }

NCHAR_CHARSET

PIC N変数で使用される文字セットの形式

CHARSET_PICX={NCHAR_CHARSET | DB_CHARSET }

DB_CHARSET

PIC X値で使用される文字セットの形式

CINCR

1

接続プールのCINCR値。現在の物理接続数がCMAX値より少ない場合、データベースに対してオープンされる物理接続数の次の増分をアプリケーションで設定できるようにします。

CLOSE_ON_COMMIT={YES | NO}

NO

COMMIT時にすべてのカーソルをクローズします。

CMAX

100

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

CMIN

2

接続プール内の物理接続の最小数を指定します。

CNOWAIT

0(未設定)

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

CODE={ANSI_C | KR_C | CPP}

KR_C

生成されるCコードの種類

COMMON_NAME=block_name *

FORTRAN COMMONブロックの名前

COMMON_PARSER

NO

共通のSQL・フロント・エンドを使用して解析します。

COMP5

YES

COMP変数ではなくCOMP-5を生成します。

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

MULTI_BYTE

C/C++コンパイラでサポートされる文字セットの種類

CONFIG=filename

ユーザー構成ファイルの名前

CPOOL

NO

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

CPP_SUFFIX=extension

*なし*

デフォルトのC++ファイル名拡張子をオーバーライドします。

CTIMEOUT

0

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

DB2_ARRAY={YES |NO}

NO

DB2配列の挿入/選択構文。このオプションに基づき、プリコンパイラでは、追加配列の挿入/選択構文をアクティブ化します。

DBMS=NATIVE|V7|V8

NATIVE

プリコンパイル時のOracleのバージョン固有の動作

DECLARE_SECTION

NO

YESの場合は、DECLARE SECTIONが必要です。

DEF_SQLCODE={NO | YES}

NO

Pro*C/C++プリコンパイラで#define SQLCODEを生成するかどうかを制御します。

DEFINE=symbol *

条件付きプリコンパイルで使用されるシンボル

DURATION={TRANSACTION | SESSION}

TRANSACTION

キャッシュ内のオブジェクトの確保継続時間を設定します。

DYNAMIC={ANSI | ORACLE}

ORACLE

OracleまたはANSI SQLの意味を指定します。

END_OF_FETCH

1403

フェッチ終了時のSQLCODE値

ERRORS={YES|NO} *

YES

端末にエラーが送信されるかどうかを指定します。

ERRTYPE=filename

*なし*

intypeファイル・エラー用のリスト・ファイルの名前

EVENTS

NO

パブリッシュ・サブスクライブ・イベント通知をサポートします。

FILE_ID

0

生成されたCOBOLファイル用の一意の数値識別子

FIPS={YES|NO}*

NO

ANSI/ISO拡張機能にフラグを立てるかどうかを指定します。

FORMAT={ANSI|TERMINAL}

ANSI

COBOLまたはFORTRAN入力行の書式

Globalization Support_LOCAL={YES|NO}

YES

SQLLIBにより実行される空白埋込み動作

HEADER=extension

*なし*

intypeファイル・エラー・メッセージ用のリスト・ファイルの名前

HOLD_CURSOR={YES|NO}*

NO

カーソル・キャッシュでSQL文を処理する方法

HOST={COBOL|COB74}

COBOL

入力ファイルのCOBOLバージョン

IMPLICIT_SVPT

NO

バッファされた挿入の前の暗黙的セーブポイント

[INAME=]filename

入力ファイルの名前

INCLUDE=path*

INCLUDEdファイルのディレクトリ・パス

INTYPE=filename

*なし*

型情報の入力ファイルの名前

IRECLEN=integer

80

入力ファイルのレコード長

LINES={YES | NO}

NO

#lineディレクティブを生成するかどうか

LITDELIM={APOST|QUOTE} *

QUOTE

COBOL文字列のデリミタ

LNAME=filename

リスト・ファイルの名前

LRECLEN=integer

132

リスト・ファイルのレコード長

LTYPE={LONG|SHORT|NONE}

LONG

リストのタイプ

MAXLITERAL=integer *

プラットフォーム固有

文字列の最大長

MAXOPENCURSORS=integer *

10

キャッシュされるカーソルの最大数

MAX_ROW_INSERT

0

挿入時にバッファされる最大行数

MODE={ORACLE|ANSI|ANSI14|ANSI13}

ORACLE

ANSI/ISO SQL規格への準拠

MULTISUBPROG={YES|NO}

YES

FORTRAN COMMONブロックが生成されるかどうか

NATIVE_TYPES

NO

ネイティブfloat/doubleのサポート

NESTED={YES | NO}

YES

YESの場合は、ネストしたプログラムをサポート

NLS_CHAR=(var1,..., varn)

*なし*

マルチバイト文字変数の指定します。

NLS_LOCAL={YES | NO}

NO

YESの場合は、Pro*COBOLの旧リリースのNCHAR方法を使用します。

OBJECTS={YES | NO}

YES

オブジェクト・タイプのサポート

OUTLINE

NO

アウトラインが作成されるカテゴリ

OUTLNPREFIX

*なし*

アウトライン名の接頭辞

[ONAME=]filename

出力ファイルの名前

ORACA={YES|NO}*

NO

ORACAを使用するかどうか

ORECLEN=integer

80

出力ファイルのレコード長

PAGELEN=integer

66

リストの各ページの行数

PARSE={NONE | PARTIAL | FULL}

FULL

Pro*C/C++で(Cパーサーを使用して).pcソースが解析されるかどうか

PICN_ENDIAN

BIG

PIC Nホスト変数のエンディアン

PICX

CHARF

PIC X COBOL変数のデータ型。

PREFETCH=0..65535

1

一定の行数を事前にフェッチすることで問合せの実行速度を向上させます。

RELEASE_CURSOR={YES|NO} *

NO

カーソル・キャッシュでSQL文を処理する方法

RUNOUTLINE

NO

データベースにアウトラインを作成します。

SELECT_ERROR={YES|NO}*

YES

SELECTエラーの処理の方法

SQLCHECK={FULL|SYNTAX|LIMITED|NONE}*

SYNTAX

構文および意味のチェックの程度

STMT_CACHE

0

文キャッシュのサイズ

SYS_INCLUDE=pathname

なし

iostream.hなどのシステム・ヘッダー・ファイルがあるディレクトリ

THREADS={YES | NO}

NO

共有サーバーアプリケーションを指定します。

TYPE_CODE={ORACLE | ANSI}

ORACLE

動的SQLでのOracleまたはANSI型コードの使用

UNSAFE_NULL={YES|NO}

NO

ORA-01405メッセージを無効にします。

USERID=username/password

有効なOracleユーザー名およびパスワード

UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}

NCHAR_CHARSET

UNICODE(UTF16)で使用される文字セットの形式を指定します。

VARCHAR={YES|NO}

NO

COBOLで暗黙的VARCHARグループ項目を認識します。

VERSION={ANY | LATEST | RECENT} *

RECENT

どのバージョンのオブジェクトを戻すか。

XREF={YES|NO}*

YES

リスト内のクロス・リファレンス・セクション

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

この項は、プリコンパイラ・オプションを簡単に参照できるように構成されています。プリコンパイラ・オプションをアルファベット順に並べ、オプションごとに用途、構文およびデフォルト値を示しています。さらに「使用上の注意」で、オプションについて説明します。使用上のノートに特に記載がない場合、そのオプションはコマンドライン、インラインまたは構成ファイルのどの方法でも入力できます。

6.7.1 ASACC

用途

リスト・ファイルが、キャリッジ制御のために各行の最初の列を使用するASA規則に従うかどうかを指定します。

構文

ASACC={YES|NO}

デフォルト値

NO

使用上のノート

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

6.7.2 ASSUME_SQLCODE

用途

宣言部で宣言されているかどうか、あるいは型が正しいかどうかに関係なく、SQLCODEが宣言されているとみなすようにOracleプリコンパイラに指示します。ASSUME_SQLCODE=YESと指定すると、リリース1.6以降のOracleプリコンパイラは、この点ではリリース1.5と同様の動作をします。

構文

ASSUME_SQLCODE={YES|NO}

デフォルト値

NO

使用上のノート

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

ASSUME_SQLCODE=NOと指定すると、次の基準のうち少なくとも1つが満たされた場合にかぎり、SQLCODEは状態変数として認識されます。

  • 宣言部で完全に正しいデータ型で宣言されている場合。

  • プリコンパイラで他の状態変数が見つからない場合。

プリコンパイラが宣言部で(完全に正しい型の)SQLSTATE宣言を検出した場合、またはSQLCAのINCLUDEを検出した場合には、SQLCODEが宣言されているとはみなしません

ASSUME_SQLCODE=YESと指定した場合、SQLSTATEおよびSQLCA(Pro*FORTRANのみ)が状態変数として宣言されると、宣言部で宣言されているかどうか、あるいは正しい型かどうかに関係なく、プリコンパイラではSQLCODEが宣言されているものとみなします。このため、リリース1.6.7以降は、この点でリリース1.5と同様の動作をします。

6.7.3 AUTO_CONNECT

用途

プログラムがデフォルトのユーザー・アカウントに自動的に接続するかどうかを指定します。

構文

AUTO_CONNECT={YES|NO}

デフォルト値

NO

使用上のノート

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

AUTO_CONNECT=YESと指定した場合、実行SQL文を検出する同時に、プログラムでは自動的に次のユーザーIDでOracleに接続を試みます。

<prefix><username>

prefixにはOracle初期化パラメータOS_AUTHENT_PREFIXの値(デフォルト値はNULL)を指定し、usernameには使用しているオペレーティング・システムのユーザー名またはタスク名を指定します。この場合、コマンドラインに別の値を指定しても、MAXOPENCURORS(10)のデフォルト値は変更できません。

AUTO_CONNECT=NO (デフォルト)の場合は、OracleにログインするにはCONNECT文を使用する必要があります。

6.7.4 CHAR_MAP

用途

char型またはchar[n]型のCホスト変数およびそれらに対するポインタのSQLへのデフォルトのマッピングを指定します。

構文

CHAR_MAP={VARCHAR2 | CHARZ | STRING | CHARF}

デフォルト値

CHARZ

使用上のノート

旧リリースでは、SQL DECLARE文を使用してCHARなどのcharまたはchar[n]ホスト変数を宣言する必要がありました。外部データ型VARCHAR2およびCHARZが、Oracle7のデフォルト文字マッピングでした。

6.7.5 CINCR

用途

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

構文

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

デフォルト値

1

使用上のノート

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

6.7.6 CLOSE_ON_COMMIT

用途

コミット文でカーソルをクローズするかどうかを指定します。

構文

CLOSE_ON_COMMIT={YES | NO}

デフォルト値

NO

使用上のノート

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

CLOSE_ON_COMMITより高いレベルでMODEが指定されていると、MODEが優先されます。たとえば、デフォルトはMODE=ORACLEおよびCLOSE_ON_COMMIT=NOです。ユーザーがコマンドラインでMODE=ANSIを指定すると、コミット時にすべてのカーソルがクローズされます。

CLOSE_ON_COMMIT=NO (MODE=ORACLEの場合)の場合、COMMITまたはROLLBACKを発行しても、クローズされるのはFOR UPDATE句を使用して宣言されたカーソルまたはCURRENT OF句で参照されるカーソルのみです。その他のカーソルはCOMMITまたはROLLBACK文による影響を受けず、オープンされている場合はオープンされたままです。ただし、CLOSE_ON_COMMIT=YES (MODE=ANSIの場合)のときにCOMMITまたはROLLBACKを発行すると、すべてのカーソルがクローズします。

6.7.7 CMAX

用途

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

構文

CINCR = 範囲は1から65535

デフォルト値

100

使用上のノート

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

6.7.8 CMIN

用途

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

構文

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

デフォルト値

2

使用上のノート

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

6.7.9 CNOWAIT

用途

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

構文

CNOWAIT = 範囲は1から65535。

デフォルト値

未設定を意味する0。

使用上のノート

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

6.7.10 CODE

用途

Pro*C/C++プリコンパイラによって生成されるC関数プロトタイプの書式を指定します。(関数プロトタイプは、関数とその引数のデータ型を宣言します。)プリコンパイラは、Cコンパイラが外部参照を解決できるよう、SQLライブラリ・ルーチンのために関数プロトタイプを生成します。CODEオプションで、プロトタイピングを制御できます。

構文

CODE={ANSI_C | KR_C | CPP}

デフォルト値

KR_C

使用上のノート

コマンドラインでは入力できますが、インラインではできません。

ANSI C規格X3.159-1989は、関数プロトタイプを規定しています。CODE=ANSI_Cのとき、Pro*C/C++では、ANSI C規格に準拠する完全な関数プロトタイプが生成されます。次に例を示します。

extern void sqlora(long *, void *); 

プリコンパイラでは、他のANSI準拠の構造体(const型修飾子など)も生成できます。

CODE=KR_C(デフォルト)のとき、生成された関数プロトタイプの引数リストは、次のようなコメントになります。

extern void sqlora(/*_ long *, void * _*/); 

CコンパイラがX3.159規格に準拠していなければ、CODE=KR_Cを指定します。

CODE=CPPのとき、プリコンパイラではC++互換コードが生成されます。

6.7.11 COMMON_NAME

用途

Pro*FORTRANの場合のみ、COMMON_NAMEオプションは、内部FORTRAN COMMONブロックの命名に使用される接頭辞を指定します。ホスト・プログラムは、COMMONブロックに直接アクセスしません。しかし、このブロックでは、同じプリコンパイル・ユニット内の2つ以上のプログラム・ユニットにSQL文を含めることができます。

構文

COMMON_NAME=blockname

デフォルト値

入力ファイル名の最初の5文字

使用上のノート

Pro*FORTRANプリコンパイラでは、1つの入力ファイル内のすべてのSQL変数用にCOMMONブロックを設定するブロック・データ・サブプログラムという専用プログラム・ファイルを使用します。ブロック・データ・サブプログラムによって、2つのCOMMONブロック(1つはCHARACTER変数用、もう1つはCHARACTER以外の変数用)が定義され、DATA文を使用して変数が初期化されます。

ブロック・データ・サブプログラムの書式は次のとおりです。

BLOCK DATA <subprogram_name>
variable declarations
COMMON statements
DATA statements
END

ホスト・プログラムは、COMMONブロックに直接アクセスしません。しかし、これらでは、同じプリコンパイル・ユニット内の2つ以上のプログラム・ファイルにSQL文を含めることができます。

COMMONブロックの命名に、プリコンパイラでは入力ファイル名と接尾辞C、DおよびIを使用します。ファイル名の最初の多くても5文字までが使用されます。たとえば、入力ファイル名がACCTSPAYの場合、COMMONブロックには、ACCTSCACCTSDおよびACCTSIという名前が付けられます。

しかし、異なる出力ファイルで定義されたCOMMONブロックには、次の図に示すように同じ名前を付けることができます。

ACCTSPAY.PFO ===> ACCTSC, ACCTSD, ACCTSI in ACCTSPAY.FOR
ACCTSREC.PFO ===> ACCTSC, ACCTSD, ACCTSI in ACCTSREC.FOR

ACCTSPAYACCTSRECを1つの実行可能プログラムにリンクさせる場合、リンカーで見えるCOMMONブロックは、6つではなく3つです。

この問題を解決するには、入力ファイル名を変更するか、COMMON_NAMEをインラインまたはコマンドラインで次のように指定することで、デフォルトのCOMMONブロック名をオーバーライドします。

COMMON_NAME=<block_name>

block_nameは、適切なCOMMONブロック名です。たとえば、COMMON_NAME=PAYを指定した場合、COMMONブロックにはPAYCおよびPAYIという名前が付けられます。block_nameの最初の多くても5文字までが使用されます。

たとえば、COMMON_NAME=PAYを指定した場合、COMMONブロックにはPAYCおよびPAYIという名前が付けられます。block_nameの最初の多くても5文字までが使用されます。

COMMON_NAMEをインラインで指定する場合は、そのEXEC ORACLE OPTION文を必ずFORTRAN PROGRAM、SUBROUTINEまたはFUNCTION文の前に置く必要があります。

デフォルトのCOMMONブロック名が、ユーザー定義のCOMMONブロック名と競合する場合、デフォルトの名前はオーバーライドできます。ただし、ユーザー定義のCOMMONブロックの名前を変更することをお薦めします。

MULTISUBPROGを指定する場合、COMMON_NAMEは不要です。

6.7.12 COMMON_PARSER

用途

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

構文

COMMON_PARSER={YES | NO}

デフォルト値

NO

使用上のノート

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

6.7.13 COMP_CHARSET

用途

使用するコンパイラでマルチバイト文字セットがサポートされているかどうかを、Pro*C/C++プリコンパイラに指定します。これは、マルチバイトのクライアント環境(たとえば、NLS_LANGがマルチバイト文字セットに設定されているとき)で作業する開発者向けです。

構文

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

デフォルト値

MULTI_BYTE

使用上のノート

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

COMP_CHARSET=MULTI_BYTE(デフォルト)が指定されると、Pro*C/C++では、マルチバイト文字セットをサポートしているコンパイラによりコンパイルされるCコードを生成します。

COMP_CHARSET=SINGLE_BYTEを指定すると、Pro*C/C++では、シングルバイト系のコンパイラ用のCコードが生成され、マルチバイト文字列中のダブルバイト文字の2バイト目がバックスラッシュ(\)に対応するASCII文字である場合に起きる可能性のある面倒な問題に、生成されたCコードにより対処します。この場合、バックスラッシュ(\)は、前にもう1つバックスラッシュを置くことでエスケープされます。

ノート:

この機能は、一般的に、古いCコンパイラを使用してシフトJIS環境で開発をするときに必要になります。

シングルバイト文字セットにNLS_LANGが設定されていると、このオプションは効果がありません。

6.7.14 COMP_CHARSET

用途

使用するコンパイラでマルチバイト文字セットがサポートされているかどうかを、Pro*C/C++プリコンパイラに指定します。これは、マルチバイトのクライアント環境(たとえば、NLS_LANGがマルチバイト文字セットに設定されているとき)で作業する開発者向けです。

構文

COMP_CHARSET={MULTI_BYTE | SINGLE_BYTE}

デフォルト値

MULTI_BYTE

使用上のノート

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

COMP_CHARSET=MULTI_BYTE(デフォルト)が指定されると、Pro*C/C++では、マルチバイト文字セットをサポートしているコンパイラによりコンパイルされるCコードを生成します。

COMP_CHARSET=SINGLE_BYTEを指定すると、Pro*C/C++では、シングルバイト系のコンパイラ用のCコードが生成され、マルチバイト文字列中のダブルバイト文字の2バイト目がバックスラッシュ(\)に対応するASCII文字である場合に起きる可能性のある面倒な問題に、生成されたCコードにより対処します。この場合、バックスラッシュ(\)は、前にもう1つバックスラッシュを置くことでエスケープされます。

ノート:

この機能は、一般的に、古いCコンパイラを使用してシフトJIS環境で開発をするときに必要になります。

シングルバイト文字セットにNLS_LANGが設定されていると、このオプションは効果がありません。

6.7.15 CONFIG

用途

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

構文

CONFIG=filename

デフォルト値

None

使用上のノート

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

Oracleプリコンパイラでは、コマンドライン・オプションがあらかじめ設定されている構成ファイルを使用できます。デフォルトでは、システム構成ファイルと呼ばれるテキスト・ファイルが使用されます。ただし、ユーザー構成ファイルと呼ばれるいくつかの代替ファイルを指定できます。

構成ファイルはネストできません。したがて、構成ファイルではCONFIGオプションを指定できません。

6.7.16 CPOOL

用途

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

構文

CPOOL = {YES|NO}

デフォルト値

NO

使用上のノート

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

6.7.17 CPP_SUFFIX

用途

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

構文

CPP_SUFFIX=filename_extension

デフォルト値

システム固有。

使用上のノート

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

6.7.18 CTIMEOUT

用途

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

構文

CTIMEOUT = 範囲は1から65535。

デフォルト値

未設定を意味する0。

使用上のノート

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

6.7.19 DB2_ARRAY

用途

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

構文

DB2_ARRAY={YES |NO}

デフォルト値

NO

使用上のノート

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

6.7.20 DBMS

用途

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

構文

DBMS=NATIVE|V7|V8

デフォルト値

NATIVE

使用上のノート

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

DBMSオプションを使用すると、Oracleのバージョン固有の動作を制御できます。DBMS=NATIVE (デフォルト)の場合、Oracleは、Oracleのネイティブ・バージョンの意味および構文上の規則に従います。

DBMS=V8またはDBMS=V7のときは、OracleはそれぞれOracle9iの規則(Oracle7、Oracle8およびOracle8iの場合と同じ規則)に従います。

表6-4は、互換性のあるDBMSMODEの設定がどのように相互に作用するかを示しています。その他の組合せはすべて互換性がなく、推奨できません。

表6-4 互換性のあるDBMSおよびMODE設定

状況 DBMS=V7/V8 MODE=ANSI DBMS=V7/V8 MODE=ORACLE

「データが見つかりません」という警告コード

+100

+1403

インジケータ変数を使用しないNULLのフェッチ

エラー-1405

エラー-1405

インジケータ変数を使用しない切捨て値のフェッチ

エラーなしでSQLWARN(2)設定

エラーなしでSQLWARN(2)設定

COMMITまたはROLLBACKによるカーソルのクローズ

すべて明示的

CURRENT OFのみ

すでにオープンしているカーソルのオープン

エラー-2117

エラーなし

すでにクローズしているカーソルのクローズ

エラー-2114

エラーなし

SQLグループ関数によるNULLの無視

警告なし

警告なし

複数行の問合せでSQLグループ関数をコールするとき

FETCH時

FETCH時

SQLCA構造体の宣言

オプション

必須

SQLCODEまたはSQLSTATE状態変数の宣言

必須

指定できるがOracleでは無視

TYPE文およびVAR文でCHARに使用される文字ホスト変数のデフォルト外部データ型

CHARF

VARCHAR2

SQL文における文字列リテラルのデフォルトの外部データ型

CHARF

CHARF

SQL文におけるCHAR変数のデフォルトの内部データ型

CHAR

CHAR

PL/SQLブロックにおけるCHAR変数のデフォルトの外部データ型

CHARF

CHARF

USERファンクションから戻される値のデフォルトの外部データ型

CHARF

CHARF

DESCRIBEコードから戻される外部データ型(動的SQL方法4)

96

96

整合性制約

有効

有効

ロールバック・セグメント用のPCTINCREASE

使用不可

使用不可

MAXEXTENTS記憶域パラメータ

使用不可

使用不可

6.7.21 DEF_SQLCODE

用途

Pro*C/C++プリコンパイラによりSQLCODEの#defineが生成されるかどうかを制御します。

構文

DEF_SQLCODE={NO | YES}

デフォルト値

NO

使用上のノート

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

DEF_SQLCODE=YESの場合、プリコンパイラでは生成されるソース・コードでSQLCODEが次のように定義されます。

#define SQLCODE sqlca.sqlcode

この定義があれば、SQLCODEを使用して実行SQL文の結果をチェックできます。DEF_SQLCODEオプションは、SQLCODEの使用が必要な規格への準拠のために指定します。

また、次のいずれかを入力して、ソース・コードにSQLCAも組み込む必要があります。

#include <sqlca.h>

または

EXEC SQL INCLUDE SQLCA;

SQLCAを組み込まなければ、このオプションを使用するとプリコンパイル時にエラーが発生します。

6.7.22 DEFINE

用途

条件付きのプリコンパイル時にソース・コードの一部の挿入または除外を行うために使用する、ユーザー定義の記号を指定します。

構文

DEFINE=symbol

デフォルト値

None

使用上のノート

DEFINEをインラインで入力する場合、EXEC ORACLE文の書式は次のとおりです。

EXEC ORACLE DEFINE <symbol>;

6.7.23 DURATION

用途

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

構文

DURATION={TRANSACTION | SESSION}

デフォルト値

TRANSACTION

使用上のノート

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

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

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

6.7.24 DYNAMIC

用途

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

構文

DYNAMIC={ORACLE | ANSI}

デフォルト値

ORACLE

使用上のノート

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

6.7.25 ERRORS

用途

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

構文

ERRORS={YES|NO}

デフォルト値

YES

使用上のノート

ERRORS=YESの場合、エラー・メッセージは端末とリスト・ファイルの両方に送信されます。

ERRORS=NOの場合、エラー・メッセージはリスト・ファイルにのみ送信されます。

6.7.26 ERRTYPE

用途

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

構文

ERRTYPE=filename

デフォルト値

なし

使用上のノート

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

6.7.27 EVENTS

用途

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

構文

EVENTS={YES | NO}

デフォルト値

NO

使用上のノート

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

6.7.28 FIPS

用途

ANSI/ISO SQLの拡張機能に(FIPSフラガーで)フラグを立てるかどうかを指定します。拡張機能とは、ANSI/ISOの書式または構文規則(権限適用規則以外)に違反するSQL要素を指します。

構文

FIPS={YES|NO}

デフォルト値

NO

使用上のノート

FIPS=YESの場合は、ANSI/ISOに組み込まれたSQL規格(SQL92)からのOracle拡張機能を使用したり、SQL92の機能を規格に準拠しない方法で使用すると、FIPSフラガーは警告メッセージを発行します(エラー・メッセージではありません)。

次のANSI/ISO SQL拡張機能には、プリコンパイル時にフラグが立てられます。

  • FOR句を含む配列インタフェース

  • SQLCA、ORACAおよびSQLDAデータ構造体

  • DESCRIBE文を含む動的SQL

  • 埋込みPL/SQLブロック

  • 自動データ型変換

  • DATE、COMP-3(Pro*COBOLのみ)、NUMBERRAWLONG RAWVARRAWROWIDおよびVARCHARデータ型

  • ランタイム・オプションを指定するためのORACLE OPTION文

  • ユーザー・イグジットでのEXEC IAF文およびEXEC TOOLS文

  • CONNECT

  • TYPEおよびVARデータ型の同値化文

  • AT db_name

  • DECLARE...DATABASE文、...STATEMENT文および...TABLE

  • WHENEVER文でのSQLWARNING条件

  • WHENEVER文でのDOおよびSTOPアクション

  • COMMIT文でのCOMMENT句およびFORCE TRANSACTION

  • ROLLBACK文でのFORCE TRANSACTION句およびTO SAVEPOINT

  • COMMIT文およびROLLBACK文でのRELEASEパラメータ

  • INTO句のWHENEVER...DOラベルおよびホスト変数の前に付けるオプションのコロン

6.7.29 FORMAT

用途

COBOLまたはFORTRANで入力する行の書式を指定します。

構文

FORMAT={ANSI|TERMINAL}

デフォルト値

ANSI

使用上のノート

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

入力行の書式はシステムによって異なります。使用しているシステム固有のOracleマニュアルを参照してください。

FORMAT=ANSIの場合、入力行の書式は、できるかぎり現行のANSI規格に準拠します。

6.7.30 Globalization Support_LOCAL

用途

Pro*COBOLの場合のみ、Globalization Support_LOCALオプションにより、グローバリゼーション・サポートの文字変換が、プリコンパイラのランタイム・ライブラリまたはOracleサーバーにより実行されます。

構文

Globalization Support_LOCAL={YES|NO}

デフォルト値

NO

使用上のノート

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

Globalization Support_LOCAL=YESの場合、ランタイム・ライブラリ(SQLLIB)により、マルチバイトのグローバリゼーション・サポート・データ型を持つホスト変数に対する空白の埋込みおよび削除がローカルに実行されます。

Globalization Support_LOCAL=NOの場合、マルチバイトのグローバリゼーション・サポート・データ型を持つホスト変数に対する空白の埋込みおよび削除の処理は、ローカルに実行されません

Oracleでは、グローバリゼーション・サポート変数の空白の埋込みまたは削除は実行されません。Globalization Support_LOCAL=NOの場合、マルチバイトのグローバリゼーション・サポート・データを使用するSQL文を実行すると、Oracleサーバーからはエラーが戻されます。

6.7.31 HEADER

用途

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

構文

HEADER=extension

デフォルト値

NONE

使用上のノート

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

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

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

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

6.7.32 HOLD_CURSOR

用途

カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの処理方法を指定します。

構文

HOLD_CURSOR={YES|NO}

デフォルト値

NO

使用上のノート

HOLD_CURSORを使用すると、プログラムのパフォーマンスを改善できます。詳細は、パフォーマンス・チューニングを参照してください。

SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリは、文の処理に必要な情報が格納されるOracleプライベートSQL領域にリンクされます。HOLD_CURSORは、カーソルとカーソル・キャッシュの間のリンクで発生する処理を制御します。

HOLD_CURSOR=NOの場合、OracleでSQL文が実行され、カーソルがクローズされた後に、プリコンパイラではそのリンクに再利用可能のマークを付けます。このリンクは、それが示すカーソル・キャッシュ・エントリが別のSQL文に必要になると、すぐに再利用されます。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。

HOLD_CURSOR=YESで、RELEASE_CURSOR=NOの場合、リンクは維持されます。プリコンパイラはそれを再利用しません。この設定によって後に続く処理の実行速度が向上するため、これは実行頻度の高いSQL文には便利です。文の再解析やOracleプライベートSQL領域用のメモリー割当ては不要です。

暗黙カーソルとともにインラインで使用する場合、SQL文の実行前にHOLD_CURSORを設定してください。明示カーソルとともにインラインで使用する場合は、カーソルをオープンする前にHOLD_CURSORを設定してください。

RELEASE_CURSOR=YESを指定するとHOLD_CURSOR=YESがオーバーライドされ、HOLD_CURSOR=NOを指定するとRELEASE_CURSOR=NOがオーバーライドされます。これら2つのオプションの相互作用の詳細は、表C-1を参照してください。

6.7.33 HOST

用途

使用するホスト言語を指定します。

構文

HOST={COB74|COBOL}

デフォルト値

COBOL

使用上のノート

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

COB74は、ANSI承認COBOLの1974版を表します。COBOLは、1985版を表します。プラットフォームによっては、これ以外の値も使用できます。

6.7.34 IMPLICIT_SVPT

用途

新しいバッチ挿入の開始前に、暗黙的セーブポイントを設定するかどうかを制御します。

構文

implicit_svpt={YES|NO}

デフォルト値

NO

使用上のノート

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

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

6.7.35 INAME

用途

入力ファイルの名前を指定します。

構文

INAME=filename

デフォルト値

None

使用上のノート

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

コマンドラインで入力ファイルの名前を指定する場合、キーワードのINAMEは省略可能です。たとえば、Pro*COBOLでは、INAME=myprog.pcoのかわりに、myprog.pcoと指定できます。

プリコンパイラでは、標準の入力ファイル拡張子(表6-5を参照)とみなされます。したがって、拡張子が非標準の場合を除き、INAMEの指定にファイル拡張子を使用する必要はありません。たとえば、Pro*FORTRANでは、myprog.pfoのかわりに、myprogと指定できます。

表6-5 入力ファイルの拡張子

ホスト言語 標準のファイル拡張子

COBOL

pco

FORTRAN

pfo

Pro*COBOLの場合のみ、INAMEを指定する際に非標準の入力ファイル拡張子を使用すると、HOSTも指定する必要があります。

6.7.36 INCLUDE

用途

EXEC SQL INCLUDEファイルのディレクトリ・パスを指定します。これは、ディレクトリを使用するオペレーティング・システム専用です。

構文

INCLUDE=path

デフォルト値

現在のディレクトリ

使用上のノート

通常、INCLUDEは、SQLCAファイルおよびORACAファイルのディレクトリ・パスの指定に使用します。プリコンパイラでは、最初にカレント・ディレクトリを検索し、次にINCLUDEで指定されたディレクトリを検索して、最後に標準のINCLUDEファイル用のディレクトリを検索します。このため、SQLCAやORACAなどの標準ファイルのディレクトリ・パスを指定する必要はありません。

標準以外のファイルについては、現在のディレクトリに格納されている場合を除いて、INCLUDEを使用してディレクトリ・パスを指定する必要があります。次に示すように、コマンドラインに複数のパスを指定できます。

... INCLUDE=<path1> INCLUDE=<path2> ...

プリコンパイラでは、最初に現在のディレクトリを検索し、次にpath1で指定したディレクトリを検索し、続いてpath2で指定したディレクトリを検索して、最後に標準のINCLUDEファイル用のディレクトリを検索します。

ディレクトリ・パスを指定しても、プリコンパイラでは最初に現在のディレクトリでファイルを検索します。このため、INCLUDEするファイルが別のディレクトリにある場合は、同じ名前のファイルが現在のディレクトリに存在しないことを確認してください。

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

6.7.37 IRECLEN

用途

入力ファイルのレコード長を指定します。

構文

IRECLEN=integer

デフォルト値

80

使用上のノート

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

IRECLENには、ORECLENの値より大きい値は指定できません。指定可能な最大値はシステムによって異なります。

6.7.38 INTYPE

用途

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

構文

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

デフォルト値

なし

使用上のノート

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

6.7.39 LINES

用途

Pro*C/C++プリコンパイラでその出力ファイルに#lineプリプロセッサ・ディレクティブが追加されるかどうかを指定します。

構文

LINES={YES | NO}

デフォルト値

NO

使用上のノート

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

LINESオプションはデバッグに便利です。

LINES=YESの場合、Pro*C/C++プリコンパイラではその出力ファイルに#lineプリプロセッサ・ディレクティブを追加します。

通常、Cコンパイラでは、それぞれの入力行が処理されるたびに行カウントを増やします。#lineディレクティブは、コンパイラの入力行カウントを強制的にリセットして、プリコンパイラで生成されたコードの行を数えないようにします。さらに、入力ファイルの名前が変わったときに、次の#lineディレクティブが新しいファイル名を指定します。

Cコンパイラでは、行番号とファイル名を使用して、エラーの発生場所を示します。したがって、Cコンパイラで発行されるエラー・メッセージは、変更済(プリコンパイル済)のソース・ファイルではなく、常に元のソース・ファイルを参照します。これにより、ほとんどのデバッガを使用して、元のソース・コードを1ステップずつ実行することもできます。

LINES=NO(デフォルト)の場合、プリコンパイラでは出力ファイルに#lineディレクティブは追加されません。

ノート:

Pro*C/C++プリコンパイラでは、#lineディレクティブはサポートされません。つまり、プリコンパイラ・ソースでは、#lineディレクティブを直接コーディングできません。ただし、LINES=オプションを使用すると、プリコンパイラに#lineディレクティブを挿入させることができます。

6.7.40 LITDELIM

用途

Pro*COBOL専用のLITDELIMオプションは、文字列定数およびリテラルのデリミタを指定します。

構文

LITDELIM={APOST|QUOTE}

デフォルト値

QUOTE

使用上のノート

LITDELIM=APOSTの場合、プリコンパイラではCOBOLコードを生成するときにアポストロフィ(')が使用されます。LITDELIM=QUOTEを指定すると、次のように二重引用符(")が使用されます。

CALL "SQLROL" USING SQL-TMP0.

SQL文では、次の例に示すように、特殊文字または小文字を含む識別子は二重引用符で区切る必要があります。

EXEC SQL CREATE TABLE "Emp2" END-EXEC.

また、文字列定数を区切る場合は、次の例のように引用符を使用します。

EXEC SQL SELECT ENAME FROM EMP WHERE JOB = 'CLERK' END-EXEC.

Pro*COBOLソース・ファイルで使用されているデリミタに関係なく、プリコンパイラではLITDELIM値で指定したデリミタを生成します。

6.7.41 LNAME

用途

リスト・ファイルのデフォルト以外の名前を指定します。

構文

LNAME=filename

デフォルト値

input.LIS(inputは入力ファイルの基底名)

使用上のノート

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

デフォルトでは、リスト・ファイルはカレント・ディレクトリに作成されます。

6.7.42 LRECLEN

用途

リスト・ファイルのレコード長を指定します。

構文

LRECLEN=integer

デフォルト値

132

使用上のノート

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

LRECLENの値の範囲は80から255です。80未満の値を指定した場合は、かわりに80が使用されます。範囲を超える値を指定すると、かわりに255が使用されます。行番号を挿入できるように、LRECLENの値がIRECLENより8以上大きくなるように指定してください。

6.7.43 LTYPE

用途

リストのタイプを指定します。

構文

LTYPE={LONG|SHORT|NONE}

デフォルト値

LONG

使用上のノート

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

LTYPE=LONGの場合、入力行はリスト・ファイルに表示されます。LTYPE=SHORTの場合、入力行はリスト・ファイルに表示されませんLTYPE=NONEの場合、リストは作成されません。

6.7.44 MAXLITERAL

用途

コンパイラの制限を超えないように、プリコンパイラで生成される文字列リテラルの最大長を指定します。たとえば、コンパイラで132文字より長い文字列リテラルを処理できない場合は、コマンドラインにMAXLITERAL=132と指定します。

構文

MAXLITERAL=integer

デフォルト値

デフォルト値は、次に示すように、プリコンパイラにより異なります。

プリコンパイラ デフォルト値

Pro*COBOL

256

Pro*FORTRAN

1000

使用上のノート

MAXLITERALの最大値は、コンパイラによって異なります。デフォルト値は言語によって異なりますが、このデフォルト値より小さい値を指定する必要がある場合があります。たとえば、一部のCOBOLコンパイラでは、132文字より長い文字列リテラルを処理できないため、その場合はMAXLITERAL=132と指定します。

MAXLITERALで指定した長さを超える文字列は、プリコンパイル中に分割され、実行時に再び結合(連結)されます。

インラインでMAXLITERALを入力することはできますが、プログラムで値を設定できるのは1回のみで、EXEC ORACLE文を最初のEXEC SQL文の前に指定する必要があります。指定しない場合、プリコンパイラは警告メッセージを発行し、余分または誤って指定したEXEC ORACLE文を無視して、処理を続行します。

6.7.45 MAXOPENCURSORS

用途

同時にオープンされ、プリコンパイラによりキャッシュに保存されたままになるカーソルの数を指定します。

構文

MAXOPENCURSORS=integer

デフォルト値

10

使用上のノート

MAXOPENCURSORSを使用すると、プログラムのパフォーマンスを改善できます。詳細は、パフォーマンス・チューニングを参照してください。

個別にプリコンパイルする場合は、「分割プリコンパイル」の説明のように、MAXOPENCURSORSを指定してください。

MAXOPENCURSORSオプションには、SQLLIBカーソル・キャッシュの初期サイズを指定します。新しいカーソルが必要で、空いているキャッシュ・エントリがない場合、Oracleではエントリの再利用が試みられます。それが成功するどうかは、HOLD_CURSOR値およびRELEASE_CURSOR値によって決まり、明示カーソルの場合は、カーソル自体の状態によって決まります。再利用できるキャッシュ・エントリが見つからない場合、Oracleは追加のキャッシュ・エントリを割り当てます。Oracleは、空きメモリーがなくなるかOPEN_CURSORSで設定された限界に達するまで、必要に応じてキャッシュ・エントリの割当てを続行します。「最大オープン・カーソル数を超えました」というOracleエラーを避けるには、MAXOPENCURSORSにOPEN_CURSORSより6以上小さい値を指定してください。

プログラムが同時に必要とするオープン・カーソルの数が増えて、MAXOPENCURSORSを再指定する必要がある場合もあります。45から50の値を指定することは珍しくありませんが、ユーザー・プロセスのメモリー領域にカーソル1つにつき、1つのプライベートSQL領域が必要なことに注意してください。デフォルト値の10は、大半のプログラムには適切な値です。

6.7.46 MAX_ROW_INSERT

用途

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

構文

max_row_insert={バッファに格納される行数}

デフォルト値

0

使用上のノート

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

6.7.47 MODE

用途

プログラムがOracleの動作規則に従うか、現行のANSI SQL規格に準拠するかどうかを指定します。

構文

MODE={ANSI|ISO|ANSI14|ISO14|ANSI13|ISO13|ORACLE}

デフォルト値

ORACLE

使用上のノート

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

MODE値のANSIとISO、ANSI14とISO14、ANSI13とISO13は、それぞれ等価です。

MODE=ORACLE (デフォルト)の場合、埋込みSQLプログラムはOracleの動作規則に従います。

MODE={ANSI14|ANSI13}の場合、プログラムは現行のANSI SQL規格にほぼ準拠します。

MODE=ANSIの場合、プログラムは完全にANSI規格に準拠し、次のような変更が有効になります。

  • CHAR列値、USER擬似列値、文字ホスト変数および引用符付きリテラルは、ANSI固定長文字列と同じように扱われます。そして、そのような値について割当て、比較、INSERTUPDATESELECTまたはFETCHを実行するときに、ANSI準拠の空白埋込みが使用されます。

  • COMMITまたはROLLBACKを発行すると、すべての明示カーソルがクローズされます。(MODE={ANSI13|ORACLE}の場合は、コミットまたはロールバックにより、CURRENT OF句で参照されるカーソルのみがクローズされます。)

  • すでにオープンされているカーソルのOPENや、すでにクローズされているカーソルのCLOSEはできません。(MODE=ORACLEの場合は、再解析を避けるために、オープン状態のカーソルを再度OPENできます。)

  • SQLCODEに戻される「データが見つかりません」というOracle警告コードは、+1403から+100になります。エラー・メッセージのテキストは変わりません。

  • Oracleが切り捨てられた列値を出力ホスト変数に割り当てた場合、エラー・メッセージは発行されません。

MODE={ANSI|ANSI14}の場合、SQLCODE(FORTRANのSQLCOD)という4バイトの整数変数、またはSQLSTATE(FORTRANのSQLSTA)という5バイトの文字変数を宣言する必要があります。詳細は、エラー処理の代替手段を参照してください。

表6-4では、MODE設定とDBMS設定の相互作用を示しています。その他の組合せは互換性がないか、お薦めできません。

6.7.48 MULTISUBPROG

用途

Pro*FORTRANの場合のみ、MULTISUBPROGオプションは、Pro*FORTRANプリコンパイラでCOMMON文およびBLOCK DATAサブプログラムを生成するかどうかを指定します。

ノート:

このオプションを使用すると、Pro*FORTRANリリース1.3アプリケーションをその後のリリースに移行できます。Pro*FORTRANリリース1.3ソース・コードを移行しない場合は、MUTISUBPROGオプションを無視してもかまいません。

構文

MULTISUBPROG={YES|NO}

デフォルト値

YES

使用上のノート

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

MULTISUBPROG=YESの場合、プリコンパイラではCOMMON文およびBLOCK DATAサブプログラムが生成されます。ホスト・プログラムはCOMMONブロックに直接アクセスしませんが、同じプリコンパイル・ユニット内の複数のプログラム・ユニットにSQL文を含めることができます。

ただし、プリコンパイラでは、異なる出力ファイルで定義されているCOMMONブロックに、同じ名前を付けることができます。それらのファイルを実行可能プログラムにリンクさせると、リンク時または実行時にエラーが発生します。この問題を解決するには、入力ファイルの名前を変更するか、COMMON_NAMEオプションを指定してデフォルトのCOMMONブロック名をオーバーライドします。問題を避けるには、MULTISUBPROG=NOを指定してください。

Pro*FORTRANソース・コードの各ソース・ファイルにサブプログラムが1つしかない場合(これはリリース1.3での制限でした)は、MULTISUBPROG=NOを指定します。MULTISUBPROG=NOの場合、COMMON_BLOCKオプションは無視され、プリコンパイラではCOMMON文またはBLOCK DATAサブプログラムは生成されません。実行可能な複数のSQL文を含むプログラム・ユニットにはすべて、宣言部が必要です。それがないと、プリコンパイル・エラーが発生します。複数の埋込みSQLプログラム・ユニットが含まれる入力ファイルの場合、プリコンパイラではそれぞれのユニットで同じ宣言が生成されます。

6.7.49 NATIVE_TYPES

用途

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

構文

NATIVE_TYPES = {YES|NO}

デフォルト値

NO

使用上のノート

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

6.7.50 NLS_CHAR

用途

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

構文

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

デフォルト値

なし。

使用上のノート

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

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

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

6.7.51 NLS_LOCAL

用途

プリコンパイラのSQLLIBランタイム・ライブラリとデータベース・サーバーのうち、どちらでマルチバイト文字セット変換が実行されるかを指定します。

構文

NLS_LOCAL={YES | NO}

デフォルト値

NO

使用上のノート

YESに設定すると、Pro*C/C++およびSQLLIBライブラリによって、ローカル・マルチバイト・サポートが提供されます。どのCホスト変数がマルチバイトかを指定するには、NLS_CHARオプションを使用する必要があります。

NOに設定すると、Pro*C/C++では、データベース・サーバーのマルチバイト・オブジェクトのサポートを使用します。新規アプリケーションにはすべて、NLS_LOCALをNOに設定してください。

環境変数NLS_NCHARには、有効な固定幅の各国語文字セットを設定する必要があります。可変長幅の各国語文字セットはサポートされていません。

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

6.7.52 OBJECTS

用途

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

構文

OBJECTS={YES | NO}

デフォルト値

YES

使用上のノート

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

6.7.53 ONAME

用途

出力ファイル名を指定します。

構文

ONAME=filename

デフォルト値

System-dependent

使用上のノート

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

このオプションは、出力ファイルの名前が入力ファイルの名前と異なる場合に、出力ファイルの名前を指定するために使用します。たとえば、次のコマンドを発行したとします。

procob INAME=my_test

デフォルトの出力ファイル名はmy_test.cobです。出力ファイル名をmy_test_1.cobにする場合は、次のコマンドを発行します。

procob INAME=my_test ONAME=my_test_1.cob

ONAMEを使用して指定するファイルには、.cob拡張子を付けてください。ONAMEオプションにはデフォルトの拡張子はありません。

出力ファイル名にはデフォルトの名前を使用するのではなく、ONAMEで明示的に名前を指定することをお薦めします。

6.7.54 ORACA

用途

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

構文

ORACA={YES|NO}

デフォルト値

NO

使用上のノート

ORACA=YESの場合、プログラムにINCLUDE ORACA文を記述する必要があります。

6.7.55 ORECLEN

用途

出力ファイルのレコード長を指定します。

構文

ORECLEN=integer

デフォルト値

80

使用上のノート

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

ORECLENに指定する値は、IRECLENの値と同じか、それより大きい値にする必要があります。指定可能な最大値はシステムによって異なります。

6.7.56 OUTLINE

用途

SQL文用にアウトラインSQLファイルを生成する必要があることを指定します。

構文

outline={yes | no | category_name}

デフォルト値

なし

使用上のノート

値がyesの場合、アウトラインSQLファイルはDEFAULTカテゴリに含まれている必要があります。生成されるアウトライン書式は次のとおりです。

DEFAULT_<filename>_<filetype>_<sequence_no>

カテゴリ名が示されている場合は、そのカテゴリにSQLファイルを生成する必要があります。この場合、生成されるアウトライン書式は次のようになります。

<category_name>_<filename>_<filetype>_<sequence_no>

値がnoの場合、アウトラインSQLファイルは生成されません。

このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneの場合は、エラーが生成されます。

6.7.57 OUTLNPREFIX

用途

アウトライン名の生成を制御します。

構文

outlnprefix={none | prefix_name}

デフォルト値

なし

使用上のノート

outlnprefix=prefix_nameの場合、アウトライン書式は次のとおりです。

<category_name>_<filename>_<filetype>

この書式は、アウトライン名の<prefix_name>に置き換えられます。

アウトライン名が30バイトを超える場合、このオプションは接頭辞名を指定する際に有効です。

outlnprefix=noneの場合、アウトライン名はシステムによって生成されます。次の書式で生成されます。

<category_name>_<filename>_<filetype>_<sequence_no>

このオプションを有効にする場合は、意味検査をフルにする必要があり、つまりオプションsqlcheck=full/semanticsを意味します。sqlcheck=syntax/limited/noneまたはoutline=false(あるいはその両方)の場合、エラーが生成されます。

6.7.58 PAGELEN

用途

リスト・ファイルの1物理ページ当たりの行数を指定します。

構文

PAGELEN=integer

デフォルト値

66

使用上のノート

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

指定可能な最大値はシステムによって異なります。

6.7.59 PARSE

用途

Pro*C/C++プリコンパイラでソース・ファイルを解析する方法を指定します。

構文

PARSE={FULL | PARTIAL | NONE}

デフォルト値

FULL

使用上のノート

C++互換コードを生成するには、PARSEオプションにNONEまたはPARTIALのいずれかを指定する必要があります。

PARSE=NONEまたはPARSE=PARTIALの場合、すべてのホスト変数は宣言部内で宣言する必要があります。

変数SQLCODEを宣言部の内側で宣言しない場合、エラー検出の信頼性がなくなります。使用しているプラットフォームのPARSEのデフォルト値をチェックしてください。

PARSE=FULLの場合、Cパーサーが動作し、コード内のクラスなどのC++構造体は認識されません。

PARSE=FULLまたはPARSE=PARTIALを指定すると、Pro*C/C++は#define#ifdefなどのCプリプロセッサ・ディレクティブを完全にサポートします。ただし、PARSE=NONEを指定すると、EXEC ORACLE文により条件付きプリプロセッシングがサポートされます。

ノート:

一部のプラットフォームでは、PARSEのデフォルト値がFULL以外の値です。使用するシステム固有のマニュアルを参照してください。

6.7.60 PREFETCH

用途

数行を事前にフェッチすることで、問合せの実行速度を向上させます。

構文

PREFETCH=integer

デフォルト値

1

使用上のノート

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

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

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

6.7.61 RELEASE_CURSOR

用途

カーソル・キャッシュでのSQL文およびPL/SQLブロック用カーソルの処理方法を指定します。

構文

RELEASE_CURSOR={YES|NO}

デフォルト値

NO

使用上のノート

RELEASE_CURSORを使用すると、プログラムのパフォーマンスを改善できます。詳細は、パフォーマンス・チューニングを参照してください。

SQLデータ操作文を実行すると、その文に関連付けられたカーソルが、カーソル・キャッシュ内のエントリにリンクされます。そのカーソル・キャッシュ・エントリは、文の処理に必要な情報が格納されるOracleプライベートSQL領域にリンクされます。RELEASE_CURSORは、カーソル・キャッシュとプライベートSQL領域の間のリンクで発生する処理を制御します。

RELEASE_CURSOR=YESの場合、OracleでSQL文が実行され、カーソルがクローズされると、プリコンパイラはただちにこのリンクを削除します。これにより、プライベートSQL領域に割り当てられたメモリーが解放され、解析ロックが解除されます。カーソルのCLOSE時に、関連付けられたリソースが確実に解放されるようにするには、RELEASE_CURSOR=YESを指定する必要があります。

RELEASE_CURSOR=NOおよびHOLD_CURSOR=YESの場合、リンクは保持されます。オープン・カーソルの数がMAXOPENCURSORSの設定値を超えないかぎり、プリコンパイラではリンクは再利用されません。この設定によって後に続く処理の実行速度が向上するため、これは実行頻度の高いSQL文には便利です。文の再解析やOracleプライベートSQL領域用のメモリー割当ては不要です。

暗黙カーソルとともにインラインで使用する場合、SQL文の実行前にRELEASE_CURSORを設定してください。明示カーソルとともにインラインで使用する場合は、カーソルをオープンする前にRELEASE_CURSORを設定してください。

RELEASE_CURSOR=YESを指定するとHOLD_CURSOR=YESがオーバーライドされ、HOLD_CURSOR=NOを指定するとRELEASE_CURSOR=NOがオーバーライドされます。これら2つのオプションの相互作用の詳細は、表C-1を参照してください

6.7.62 RUNOUTLINE

用途

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

構文

runoutline={yes | no}

デフォルト値

なし

使用上のノート

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

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

6.7.63 SELECT_ERROR

用途

1行のSELECT文が複数行を戻すとき、あるいはホスト配列の許容範囲を超える行数を戻すときに、プログラムでエラーが発生するかどうかを指定します。

構文

SELECT_ERROR={YES|NO}

デフォルト値

YES

使用上のノート

SELECT_ERROR=YESの場合、1行のSELECT文で戻される行数が多すぎたり、配列のSELECT文でホスト配列に入りきらない行数が戻されたりすると、エラーが発生します。

SELECT_ERROR=NOの場合、1行のSELECT文で戻される行数が多すぎても、配列のSELECT文でホスト配列に入りきらない行数が戻されても、エラーは発生しません。

YESを指定してもNOを指定しても、行は表から無作為に選択されます。選択する行の順序を特定するには、SELECT文にORDER BY句を指定します。SELECT_ERROR=NOのときORDER BY句を指定すると、配列からの選択時にOracleは先頭行または先頭のn行を戻します。SELECT_ERROR=YESを指定すると、ORDER BY句の有無を問わず、戻る行数が多すぎる場合にエラーが生成されます。

6.7.64 SQLCHECK

用途

構文およびセマンティック・チェックの種類と範囲を指定します。

構文

SQLCHECK={SEMANTICS|FULL|SYNTAX|LIMITED|NONE}

デフォルト値

SYNTAX

使用上のノート

SEMANTICS値とFULL値は等価です。同様に、SYNTAX値とLIMITED値も等価です。

Oracleプリコンパイラは、埋込みSQL文とPL/SQLブロックの構文およびセマンティックをチェックすることで、プログラムのデバッグに役立ちます。検出されたエラーはプリコンパイル時にレポートされます。

チェックのレベルは、インラインまたはコマンドラインでSQLCHECKオプションを入力することで制御します。ただし、インラインで指定するチェックのレベルを、コマンドラインで指定する(またはデフォルトによって受け入れる)レベルよりも高くすることはできません。たとえば、コマンドラインでSQLCHECK=NONEを指定すると、インラインでSQLCHECK=SYNTAXを指定することはできません。

SQLCHECK=SYNTAX|SEMANTICSの場合、PL/SQLの予約語がSQL文で使用されると、そのSQL文がPL/SQLでなくても、プリコンパイラではエラーが発生します。PL/SQLの予約語を識別子として使用する必要がある場合は、二重引用符で囲んでください。

SQLCHECK=SEMANTICSを指定した場合、次のものを対象とした構文およびセマンティックのチェックが行われます。

  • INSERTUPDATEなどのデータ操作文

  • PL/SQLブロック

ただし、リモートのデータ操作文(AT db_name句を使用する文)については、構文チェックのみが行われます。

プリコンパイラは、意味検査に必要な情報を、埋め込まれたDECLARE TABLE文から取得します。また、オプションUSERIDが指定されている場合は、Oracleに接続してデータ・ディクショナリにアクセスするとこの情報を取得します。データ操作文やPL/SQLブロックで参照する表がすべてDECLARE TABLE文で定義されている場合は、Oracleに接続する必要があります。

Oracleに接続してもデータ・ディクショナリで見つからない情報がある場合は、DECLARE TABLE文を使用して、欠けている情報を提供する必要があります。プリコンパイル時には、DECLARE TABLE文の定義とデータ・ディクショナリの定義が矛盾する場合、前者が優先されます。

新しいプログラムをプリコンパイルするときには、SQLCHECK=SEMANTICSを指定してください。ホスト・プログラムにPL/SQLブロックを埋め込む場合は、SQLCHECK=SEMANTICSUSERIDオプションを指定する必要があります

SQLCHECK=SYNTAXの場合、プリコンパイラでは次のものの構文チェックを行います。

  • データ操作文

  • PL/SQLブロック

意味上のチェックは行いません。DECLARE TABLE文は無視され、PL/SQLブロックは使用できません。データ操作文のチェックには、下位互換性のあるOracleデータベース・バージョン7構文規則が使用されます。プリコンパイル済のプログラムを移行する場合は、SQLCHECK=SYNTAXを指定してください。

SQLCHECK=NONEの場合、構文チェックもセマンティック・チェックも行われません。DECLARE TABLE文は無視され、PL/SQLブロックは使用できません。プログラムが次のような場合は、SQLCHECK=NONEを指定してください。

  • Oracle以外のSQLが含まれる場合(たとえば、Oracle以外のサーバーにオープン・ゲートウェイを介して接続するため)

  • まだ作成されておらず、それらのためのDECLARE TABLE文がない表を参照する場合

次の表に、SQLCHECKによって行われるチェックについてまとめます。構文およびセマンティックのチェックの詳細は、構文およびセマンティックのチェックを参照してください。

SQLCHECK=SEMANTIC: 構文 SQLCHECK=SEMANTIC: セマンティック SQLCHECK=SYNTAX: 構文 SQLCHECK=SYNTAX: セマンティック SQLCHECK=NONE: 構文 SQLCHECK=NONE: セマンティック

DML

該当なし

該当なし

該当なし

リモートDML

該当なし

該当なし

該当なし

該当なし

PL/SQL

該当なし

該当なし

該当なし

該当なし

6.7.65 STMT_CACHE

用途

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

構文

STMT_CACHE = 0から65535

デフォルト値

0

使用上のノート

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

6.7.66 SQLCHECK

用途

構文およびセマンティック・チェックの種類と範囲を指定します。埋込みSQL文およびPL/SQLブロックの構文および意味を検査することで、Pro*C/C++プリコンパイラはコーディングの誤りをすみやかに発見し修正できるように支援します。構文規則は、言語要素を並べて正しい文を作成する基準を示します。これにより、キーワード、オブジェクト名、演算子、デリミタなどのオブジェクトが、SQL文に正しく配置されていることを確認できます。

構文

SQLCHECK={SEMANTICS | FULL | SYNTAX}

デフォルト値

SYNTAX

機能

次の場合

SQLCHECK=SYNTAX

クライアント側SQLインタフェースを使用してSQL文の構文のみをチェックします。

次の場合

SQLCHECK=SEMANTICSまたはFULL

SQL文は、解析中に一般的な構文を使用してIDLオブジェクトにパッケージ化またはバンドルされます。一般的な構文では、SQL構文は解釈されず、ホスト変数、インジケータ変数および可能なSQL識別子のみが識別されます。意味フェーズ中に、現在SQLに対して行われている方法で、ホスト変数およびインジケータ変数の妥当性がチェックされます。同じ動作が、表名、列名、タイプなどのセマンティックに対して実行されます。

使用上のノート

SEMANTICSは、FULLと同じです。

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

関連項目:

詳細は、ページD‐1の「構文およびセマンティックのチェック」を参照してください。(Pro*Cプログラマーズ・ガイド)

6.7.67 THREADS

用途

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

構文

THREADS={YES | NO}

デフォルト値

NO

使用上のノート

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

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

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

6.7.68 TYPE_CODE

用途

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

構文

TYPE_CODE={ORACLE | ANSI}

デフォルト値

ORACLE

使用上のノート

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

6.7.69 UNSAFE_NULL

用途

UNSAFE_NULL=YESを指定すると、インジケータ変数を使用せずにNULLをフェッチしても、ORA-01405メッセージは生成されません。

構文

UNSAFE_NULL={YES|NO}

デフォルト値

NO

使用上のノート

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

MODE=ORACLEおよびDBMS=V7の場合のみ、UNSAFE_NULL=YESを指定できます。

埋込みPL/SQLブロックのホスト変数では、UNSAFE_NULLオプションには何の効果もありません。ORA-01405エラーを避けるには、インジケータ変数を使用する必要があります

6.7.70 USERID

用途

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

構文

USERID=username/password

デフォルト値

None

使用上のノート

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

先頭にOracle初期化パラメータOS_AUTHENT_PREFIXの付いたOracleユーザー名しか受け入れない自動接続機能を使用している場合は、このオプションを使用しないでください。

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

6.7.71 UTF16_CHARSET

用途

UNICODE(UTF16)変数で使用される文字セットの形式を指定します。

構文

UTF16_CHARSET={NCHAR_CHARSET | DB_CHARSET}

デフォルト値

NCHAR_CHARSET

使用上のノート

コマンドラインまたは構成ファイルでのみ使用でき、インラインでは使用できません。

UTF16_CHARSET=NCHAR_CHARSET(デフォルト)の場合、UNICODE(UTF16)のバインドまたは定義バッファは、サーバー側の各国語文字セットに従って変換されます。ターゲット列がCHARの場合は、パフォーマンスが低下することがあります。

UTF16_CHAR=DB_CHARSETの場合、UNICODE(UTF16)バインドまたは定義バッファは、データベースの文字セットに従って変換されます。

警告:

ターゲット列がNCHARの場合、データが失われることがあります。

6.7.72 VARCHAR

用途

Pro*COBOLの場合のみ、VARCHARオプションは、「概要」で説明されているCOBOLグループ項目をVARCHARデータ型として扱うようにプリコンパイラに指示します。

構文

VARCHAR={YES|NO}

デフォルト値

NO

使用上のノート

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

VARCHAR=YESと指定した場合、「概要」で説明した暗黙的なグループ項目を、長さフィールドおよび文字列フィールドを持つOracle VARCHAR外部データ型として受け入れます。

VARCHAR=NOの場合、Pro*COBOLプリコンパイラでは、暗黙的なグループ項目はVARCHAR外部データ型としては受け入れられません。

6.7.73 VERSION

用途

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

構文

VERSION={RECENT | LATEST | ANY}

デフォルト値

RECENT

使用上のノート

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

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

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

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

6.7.74 XREF

用途

リスト・ファイルに相互参照セクションを組み込むかどうかを指定します。

構文

XREF={YES|NO}

デフォルト値

YES

使用上のノート

XREF=YESの場合、ホスト変数、カーソル名および文名に相互参照が組み込まれます。クロス・リファレンスは、個々のオブジェクトがプログラム内のどこで定義され、どこで参照されているかを示します。

XREF=NOの場合、相互参照セクションは組み込まれません。

6.8 条件付きプリコンパイル

条件付きプリコンパイルでは、特定の条件に基づいて、ホスト・プログラム内のコード・セクションの組込み(または除外)を行います。たとえば、UNIXでプリコンパイルするときにはあるコード・セクションを組み込み、VMSでプリコンパイルするときには別のコード・セクションを組み込むことができます。条件付きプリコンパイルを使用すると、異なる環境で実行可能なプログラムを作成できます。

コードの条件付きセクションは、環境と実行するアクションを定義する文で示されます。これらのセクションには、ホスト言語の文とEXEC SQL文を記述できます。次の文により、プリコンパイルを条件付きで制御できます。

EXEC ORACLE DEFINE symbol; -- define a symbol
EXEC ORACLE IFDEF symbol; -- if symbol is defined
EXEC ORACLE IFNDEF symbol; -- if symbol is not defined
EXEC ORACLE ELSE; -- otherwise
EXEC ORACLE ENDIF; -- end this control block

EXEC ORACLE文はすべて、ホスト言語の文の終了記号で終わる必要があります。たとえばPro*COBOLでは、条件文は「END-EXEC」で終了する必要があります。Pro*FORTRANでは改行記号で終了する必要があります。

6.8.1

次の例では、シンボルsite2が定義されている場合のみ、SELECT文がプリコンパイルされます。

EXEC ORACLE IFDEF site2;
 EXEC SQL SELECT DNAME
 INTO :dept_name
 FROM DEPT
 WHERE DEPTNO = :dept_number;
EXEC ORACLE ENDIF;

次の例に示すように条件ブロックはネストできます。

EXEC ORACLE IFDEF outer;
 EXEC ORACLE IFDEF inner;
 ...
 EXEC ORACLE ENDIF;
EXEC ORACLE ENDIF;

ホスト言語または埋込みSQLコードをIFDEFとENDIFの間に記述し、シンボルを定義しないことで、そのコードをコメント行にすることができます。

6.8.2 シンボルの定義

シンボルを定義するには2通りの方法があります。1つは、次の文をホスト・プログラムに組み込む方法です。

EXEC ORACLE DEFINE symbol;

もう1つは、次の構文を使用してコマンドラインでシンボルを定義する方法です。

... INAME=filename ... DEFINE=symbol

symbolの部分は大/小文字区別がありません。

Oracleプリコンパイラをシステムにインストールした時点で、ポート固有のいくつかのシンボルが事前に定義されます。たとえば、事前に定義されたオペレーティング・システムのシンボルには、CMS、MVS、MS-DOS、UNIXおよびVMSがあります。

6.9 分割プリコンパイル

Oracleプリコンパイルを使用すると、複数のホスト・プログラム・モジュールを別々にプリコンパイルし、それらをリンクして1つの実行可能プログラムを作成できます。これにより、プログラムの機能コンポーネントの作成とデバッグを複数のプログラマが分担して行う場合に必要とされる、モジュラー・プログラミングが可能になります。個々のプログラム・モジュールを同じ言語で記述する必要はありません。

6.9.1 ガイドライン

次のガイドラインは、いくつかの一般的な問題を回避するのに役立ちます。

カーソルの参照

カーソル名はSQL識別子であり、その有効範囲はプリコンパイル・ユニットです。このため、カーソルの動作が複数のプリコンパイル・ユニット(ファイル)にまたがることはありません。つまり、あるファイルで宣言したカーソルを、別のファイルからオープンまたはフェッチできません。したがって、分割プリコンパイルを実行するときは、指定のカーソルに対する定義と参照がすべて1つのファイルに記述されているか確認してください。

MAXOPENCURSORSの指定

Oracleに接続するプログラム・モジュールをプリコンパイルするときは、MAXOPENCURSORSに、どのプログラム・モジュールについても十分な大きさの値を指定してください。指定したMAXOPENCURSORSの値は、別のプログラム・モジュールに使用すると無視されます。実行時には、接続に有効な値のみが使用されます。

単一のSQLCAの使用

使用するSQLCAが1つのみの場合は、1つのプログラム・モジュールでそのSQLCAをグローバルに宣言する必要があります。

6.9.2 制限事項

1つの明示カーソルの参照はすべて、同じプログラム・ファイル内にあることが必要です。別のモジュールでDECLAREされたカーソルの操作はできません。カーソルの詳細は、「埋込みSQLの使用方法」 を参照してください。

また、SQL文が含まれるプログラム・ファイルにはすべて、ローカルSQL文の有効範囲内にあるSQLCAが1つ必要です。

6.10 コンパイルおよびリンク

実行可能プログラムを作成するには、プリコンパイラによって生成されたソース・ファイルをコンパイルし、その結果得られるオブジェクト・モジュールを、SQLLIBおよびシステム固有のOracleライブラリ内の必要なモジュールとリンクさせる必要があります。また、OCIコールを埋め込む場合も、必ずOCIランタイム・ライブラリ(OCILIB)にリンクしてください。

リンカーはオブジェクト・モジュール内のシンボリック参照を解決します。これらの参照で競合が発生すると、リンクは失敗します。プリコンパイル済のプログラムにサード・パーティのソフトウェアをリンクしようとするときに、このような競合が発生する可能性があります。こうした問題が生じるのは、サード・パーティのソフトウェアの中にはOracleと互換性のないものがあるためです。Oracleカスタマ・サービスに問い合せて、使用するソフトウェアがサポートされているかどうかを確認してください。

コンパイルおよびリンクの方法はシステムによって異なります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。

OCIハンドルおよび記述子の属性の詳細は、「ハンドルおよび記述子の属性」を参照してください。

6.10.1 システム依存

コンパイルおよびリンクの方法はシステムによって異なります。たとえば、システムによっては、ホスト言語プログラムをコンパイルするときにコンパイラの最適化をオフにする必要があります。手順は、使用しているシステム固有のOracleマニュアルを参照してください。

6.10.2 マルチバイト・グローバリゼーション・サポートの互換性

マルチバイトのグローバリゼーション・サポート機能を使用する場合、オブジェクト・ファイルをSQLLIBランタイム・ライブラリの現行バージョンにリンクさせる必要があります。このリリースのマルチバイト・グローバリゼーション・サポート機能は、SQLLIBランタイム・ライブラリではサポートされていますが、Oracleサーバーではサポートされていません。この結果生まれたアプリケーションは、Oracleデータベースのどのリリースでも実行できます。