ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

4.3 SQLプリコンパイラのコマンドライン

記号を定義することにより、SQLプリコンパイラを起動しやすくなります。


$ SQLPRE == "$SQL$PRE"

SQLプリコンパイラには言語修飾子が必要であるため、コマンドを1行で起動できるよう特定の言語を定義できます。


$ SADA == "$SQL$PRE/ADA"
$ SADA SQL_DYNAMIC

記号を定義することにより、ホスト言語プログラム・ファイルのファイル仕様の有無にかかわらずSQLプリコンパイラを起動できるようになります。

プリコンパイラを起動するためにどのような方法を選択する場合でも、SQLプリコンパイラによるモジュール・ファイルの処理方法を制御するための様々な修飾子を指定できます。構文図は、ホスト言語プログラム・ファイルの仕様とともに使用できる修飾子の形式を示しています。


形式













引数

ANSI_FORMAT

NOANSI_FORMAT

SQLプリコンパイラで終端形式のCOBOLまたはANSI形式のCOBOLのいずれを使用するかを指定します。

デフォルトは終端形式のCOBOL NOANSI_FORMAT修飾子です。

c-string-options

SQLでCホスト言語文字列を処理する方法を制御します。

C_STRINGキーワードとともに[NO]BLANK_FILLオプションと[NO]FIXED_CDD_STRINGSオプションのいずれかまたは両方を使用して、C文字列の特性を制御します。

SQLOPTIONS= (C_STRING = [NO]BLANK_FILL)

SQLOPTIONS= (C_STRING = [NO]FIXED_CDD_STRINGS)

SQLOPTIONS= (C_STRING = ([NO]BLANK_FILL, [NO]FIXED_CDD_STRINGS))

Cホスト言語文字列を処理する方法を指定します。

SQLOPTIONS= (CONNECT)

SQLOPTIONS= (NOCONNECT)

複数のユーザー接続を許可し、複数のモジュールにわたるグローバル・データベースにアクセスできるようにするかどうかを制御します。アプリケーション内のすべてのSQLモジュールは、接続が有効または無効の状態でコンパイルする必要があります。

デフォルトはSQLOPTIONS=NOCONNECT修飾子です。

SQLOPTIONS= (CONSTRAINT_MODE=IMMEDIATE)

SQLOPTIONS= (CONSTRAINT_MODE=DEFERRED)

必要に応じて、SQLプリコンパイラ・コマンドラインにSQLOPTIONS=(CONSTRAINT_MODE=IMMEDIATE)またはSQLOPTIONS=(CONSTRAINT_MODE=DEFERRED)修飾子を指定して、コミット時の制約に対するデフォルトの制約評価モードを設定できます。(この修飾子は、動詞実行時の制約の評価には影響しません。)デフォルトはDEFERREDです。つまり、コミット時の制約はコミット時に評価されます。

制約にIMMEDIATEを設定すると、SET ALL CONSTRAINTS DEFERRED文が発行されるまで、またはトランザクションがコミット操作またはロールバック操作で完了するまでは、影響を受ける各制約はすぐに、および各文の終わりに評価されます。

SET ALL CONSTRAINTS文により、SQLOPTIONS修飾子に指定した制約評価モードはオーバーライドされます。デフォルトの制約モードの詳細は、「SET文」を参照してください。

ANSI規格のSQLとの互換性が必要な場合は、制約をIMMEDIATEとして設定する必要があります。ただし、ほとんどの場合は、デフォルト設定(CONSTRAINT_MODE=DEFERRED)で十分です。

SQLOPTIONS= (CONSTRAINT_MODE=ON)

SQLOPTIONS= (CONSTRAINT_MODE=OFF)

CONSTRAINT_MODE=ON修飾子とCONSTRAINT_MODE=OFF修飾子はそれぞれ、CONSTRAINT_MODE=IMMEDIATE修飾子とCONSTRAINT_MODE=DEFERRED修飾子の動作を重複します。

context-file-name

プログラムのコンパイルおよび実行時に適用するDECLARE文が含まれるSQLコマンド・プロシージャです。context-file-nameの詳細は、第2.11節を参照してください。

database-options

指定したデータベース型にアクセスするためのプログラムがSQLプリコンパイラによって正しく処理されるよう指定します。データベース・オプションの詳細は、第2.10節を参照してください。

プリコンパイラのデータベース・オプションは、実行時にデータベースにアタッチしてオーバーライドすることもできます。DECLARE文では、指定データベースのデータベース・オプションが設定されます。

デフォルトでは、プログラムをコンパイルするために使用されたデータベースから有効なデータベースが判断されます。プログラムをコンパイルするために使用されたデータベースがない場合は、最新バージョンのOracle Rdbを使用して作成されたデータベースのプログラムがプリコンパイラにより処理されます。

SQLOPTIONS= (DECLARE_MESSAGE_VECTOR)

SQLOPTIONS= (NODECLARE_MESSAGE_VECTOR)

RDB$MESSAGE_VECTOR構造体がSQLPREの処理時にSQLCAの一部としてホスト言語で宣言されるよう指定します。このスイッチは、$特殊文字をサポートする言語コンパイラとともに使用できます。

デフォルトはSQLOPTIONS=(DECLARE_MESSAGE_VECTOR)修飾子です。

EXTEND_SOURCE

NOEXTEND_SOURCE

SQLプリコンパイラがデフォルトの72列ではなく132列のFORTRANソースを参照できるようにします。

SQLOPTIONS= (EXTERNAL_GLOBALS)

SQLOPTIONS= (NOEXTERNAL_GLOBALS)

別名参照を強制的に別名定義として処理するかどうかを指定します。別名定義は、DECLARE ALIAS文でGLOBALキーワード(デフォルト)を使用して宣言された別名です。別名参照は、DECLARE ALIAS文でEXTERNALキーワードを使用して宣言された別名です。

EXTERNAL_GLOBALS修飾子により、別名参照は別名定義として処理されます。この修飾子は、V7.0より前のバージョンとの互換性を提供します。

NOEXTERNAL_GLOBALS修飾子により、別名参照は別名参照として処理されます。アプリケーションによって複数の共有可能なイメージ間で別名が共有される場合、OpenVMSではNOEXTERNAL_GLOBALS修飾子が便利です。

OpenVMSではデフォルトはSQLOPTIONS=(EXTERNAL_GLOBALS)修飾子です。

別名定義と別名参照の詳細は、「DECLARE ALIAS文」を参照してください。別名と共有可能イメージの使用方法の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

SQLOPTIONS= (FLAG_NONSTANDARD)

SQLOPTIONS= (FLAG_NONSTANDARD =SQL92_ENTRY)

SQLOPTIONS= (FLAG_NONSTANDARD =SQL89)

SQLOPTIONS= (FLAG_NONSTANDARD =MIA)

SQLOPTIONS= (NOFLAG_NONSTANDARD)

SQLで非標準構文が識別されるかどうかを指定します。非標準構文は拡張機能と呼ばれ、ANSI/ISO SQL規格またはマルチベンダー・インテグレーション・アーキテクチャ(MIA)規格の一部ではない構文を示します。次のオプションを指定できます。

デフォルトはSQLOPTIONS=(NOFLAG_NONSTANDARD)修飾子です。

FLOAT=D_FLOAT

FLOAT=G_FLOAT

FLOAT=IEEE_FLOAT

SQLプリコンパイラで仮パラメータ・リストの浮動小数点データ型に使用される浮動小数点表現を指定するとともに、言語コンパイラに渡される浮動小数点修飾子を指定します。

SQLプリコンパイラにより、埋込みSQLはホスト言語宣言およびプロシージャ・コールに変換されます。また、プロシージャ・コールの背後のプロシージャも生成されます。SQL$PREの/FLOAT修飾子により、SQL$PREでホスト言語変数について前提となる浮動小数点形式が決まります。これにより、生成されたSQLプロシージャに対して内部で行われる変換が決まります。SQL$PREにより、プリコンパイルされたプログラムを処理するためにホスト言語コンパイラがコールされるときに、ホスト言語でサポートされている/FLOAT修飾子に同等の修飾子が渡されます。つまり、ホスト言語変数の浮動小数点形式が/FLOAT修飾子で決まるかぎり、SQL$PREによって生成されるプロシージャ・コールのパラメータとホスト言語変数の浮動小数点形式には互換性があることが保証されます。個別変数の浮動小数点形式を明示的に宣言する型がホスト言語によって提供される場合、SQL$PREでは、この情報を使用して、/FLOAT修飾子とは関係なく、必要な変換が決定されます。

単精度浮動小数点型または倍精度浮動小数点型に関するSQLプリコンパイラのデフォルトの浮動小数点形式はそれぞれ、F浮動小数点形式とG浮動小数点形式です。これは、SQL$PREコマンドで/FLOAT=G_FLOAT修飾子を使用することと同じです。

ホスト言語変数がレコードまたは構造体(シングルトンSELECT文のINTO句の修飾パラメータなど)である場合、浮動小数点型であるレコードまたは構造体のフィールドは、前述の説明と同じルールに従います。

まれに、SQL$PREによって識別されない浮動小数点形式を指定するメカニズムがホスト言語に採用されている場合があります。このような場合、開発者には、SQL$PREで想定される形式を使用する責任があります。これらのケースの詳細は、第4.4節のホスト言語固有の項を参照してください。

注意

共通データ・ディクショナリは、浮動小数点型をサポートしています。ただし、/FLOAT修飾子によってIEEE_FLOATが指定される場合、これらの型は使用できない場合があります。

G_FLOAT

NOG_FLOAT

/G_FLOAT修飾子と/NOG_FLOAT修飾子は、下位互換性を確保するためのものです。これらの修飾子はそれぞれ、/FLOAT=G_FLOATと/FLOAT=D_FLOATに相当します。/FLOAT修飾子と/[NO]G_FLOAT修飾子の両方は指定しないでください。

SQLOPTIONS= (INITIALIZE_HANDLES)

SQLOPTIONS= (NOINITIALIZE_HANDLES)

別名定義を強制的に別名参照として処理するかどうかを指定します。NOINITIALIZE_HANDLES修飾子を使用すると、すべての別名宣言が別名参照として処理されます。

別名定義は、DECLARE ALIAS文でGLOBALキーワード(デフォルト)を使用して宣言された別名です。別名参照は、DECLARE ALIAS文でEXTERNALキーワードを使用して宣言された別名です。

NOINITIALIZE_HANDLES修飾子は、OpenVMSにおいて既存のソース・コードで別名定義を強制的に別名参照として処理するときに便利です。OpenVMSでは通常、定義と参照は区別されないため、別名参照が必要なときにアプリケーションで別名定義を宣言できます。別名を共有する複数のイメージにアプリケーションを再編成する場合、別名定義と別名参照を区別する必要があります。この場合、NOINITIALIZE_HANDLES修飾子を使用して、ソース・コードを変更せずに定義を強制的に参照として処理します。

アプリケーションでEXTERNALキーワードを使用して別名参照が正しく宣言された場合、[NO]INITIALIZE_HANDLESのかわりにNOEXTERNAL_GLOBALS修飾子を使用して、OpenVMSでデフォルトをオーバーライドし、別名参照が参照として正しく処理されるようにします。

デフォルトはSQLOPTIONS=INITIALIZE_HANDLES修飾子です。この修飾子により、[NO]EXTERNAL_GLOBALS修飾子はオーバーライドされます。

SQLOPTIONS=[NO]INITIALIZE_HANDLES修飾子は、Oracle Rdbの以前のバージョンとの互換性を確保するために保持されます。V7.0以上の場合、[NO]EXTERNAL_GLOBALS修飾子を使用します。これにより、別名定義がより正確に制御されます。

別名定義と別名参照の詳細は、「DECLARE ALIAS文」を参照してください。別名と共有可能イメージの使用方法の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

LIST

NOLIST

Oracle Rdb for OpenVMS Alphaにおいて、SQLのコンパイルとホスト言語のコンパイルに関する情報が含まれるリスト・ファイル(デフォルトのファイル拡張子.lis)を生成するかどうかを決定します。また、論理名SQL$KEEP_PREP_FILESが定義されている場合、SQLのコンパイルのみに関する情報が含まれる中間モジュール・リスト・ファイル(ファイル拡張子.mli)が保持されます。LIST修飾子を指定するときにファイル仕様を含めない場合、SQLプリコンパイラによりファイル拡張子.lisを使用してソース・ファイルと同じ名前でリスト・ファイルが作成されます。

デフォルトはNOLIST修飾子です。

MACHINE_CODE

NOMACHINE_CODE

Oracle Rdb for OpenVMS Alphaにおいて、リスト・ファイルにマシン・コードを含めるかどうかを指定します。ただし、マシン・コードが含まれるリスト・ファイルを生成するには、LIST修飾子も指定する必要があります。

デフォルトはNOMACHINE_CODE修飾子です。

OBJECT

NOOBJECT

ソース・ファイルのコンパイルによって致命的エラーが発生しないときにオブジェクト・ファイルを作成するかどうかを指定します。また、オブジェクト・ファイルを作成する場合、ファイルの名前も指定します。OBJECT修飾子を指定するときにファイル仕様を含めない場合、ファイル拡張子.objを使用してソース・ファイルと同じ名前でオブジェクト・ファイルが作成されます。OBJECT修飾子は、Adaを除く任意の言語で指定できます。

デフォルトはOBJECT修飾子です。

OPTIMIZATION_LEVEL=optimization_options

SQLモジュール言語プログラム内のすべての問合せを処理するために使用されるオプティマイザ計画を指定します。選択可能なオプションは、次のとおりです。

TOTAL_TIMEオプションまたはFAST_FIRSTオプションは、AGGRESSIVE_SELECTIVITYオプションまたはSAMPLED_SELECTIVITYオプションとともに選択できます。キーワードを区切るにはカンマを使用し、リストは丸カッコで囲みます。

次の例は、OPTIMIZATION_LEVEL修飾子の使用方法を示しています。


$ SQL$PRE/SQLOPTIONS=OPTIMIZATION_LEVEL=(TOTAL_TIME,SAMPLED_SELECTIVITY) APPCODE.SC

OPTIMIZE WITH句またはOPTIMIZE_FOR句が明示的に含まれる問合せは、OPTIMIZATION_LEVEL修飾子を使用して確立された設定の影響は受けません。

最適化レベル修飾子は、静的SQL問合せのオプティマイザ計画を変更するために使用します。ただし、OPTIMIZATION_LEVELオプションによって設定されたデフォルトのオプティマイザ計画は、最上レベルのSELECT文に設定されたデフォルトのオプティマイザ計画によってオーバーライドできます。

一方、SET OPTIMIZATION LEVEL文の場合は、動的SQL問合せのコンパイルのみに関する問合せ最適化レベルを指定します。この文は、SQLのコンパイル時の環境や静的問合せの実行時環境には影響しません。

optimization-options

SQLプリコンパイラ・プログラム内のすべての問合せを処理するために使用されるオプティマイザ計画を指定します。

SQLOPTIONS= (PASSWORD_DEFAULT=password)

コンパイル時のユーザーのパスワードを指定します。

DECLARE ALIAS文のUSING DEFAULT句を使用する場合、この修飾子を使用して、コンパイル時のユーザーのパスワードをプログラムに渡します。

pre-host-file-spec

埋込みSQL文が含まれるホスト言語ソース・ファイルのファイル仕様です。ソース・ファイルのデフォルトのファイル拡張子は、言語修飾子に指定されているホスト言語で決まります。

言語 省略時の設定ファイル拡張子
Ada .sqlada
C .sc
COBOL .sco
FORTRAN .sfo
Pascal .spa
PL/I .spl

ホスト言語がAdaまたはCOBOLである場合、ファイル名(ファイル拡張子なし)を27文字より長くすることはできません。

プリコンパイラ・コマンドラインでは、この引数でホスト言語ソース・ファイルのリストを使用できますが、最初に出現するファイル仕様のみが処理されます。ファイルのリストを指定すると、次のようになります。

たとえば、次のコマンドラインは有効ですが、MY_FILEホスト言語ファイルのみがプリコンパイルされます。


$ SQLPRE/PLI/LIS/DEB MY_FILE+MY_TLB_1/LIB+MY_TLB_2/LIB
$ SQLPRE/PASCAL MY_FILE,MY_OTHER_FILE
$ SQLPRE/COB/DEB MY_FILE,MY_NODB_FILE
$ SQLPRE/CC MY_FILE+REST_OF_APPL+APPL_TLB/LIB

このコマンドラインの場合、後続の対応するコマンドラインはホスト言語コンパイラに渡されます。


$ PLI/LIS/DEB MY_FILE.PLI;n+MY_TLB_1/LIB+MY_TLB_2/LIB/NOG_FLOAT
$ PAS MY_FILE.PAS;n,MY_OTHER_FILE
$ COB/DEB MY_FILE.COB;n,MY_NODB_FILE
$ CC MY_FILE.C;n+REST_OF_APPL+APPL_TLB/LIB/NOG_FLOAT

;n表記は、SQLプリコンパイラによって生成されたホスト言語ファイルのバージョン番号を示しています。

pre-lang-qualifiers

埋込みSQLプロシージャが含まれるプログラムが書き込まれるホスト言語を示します。言語修飾子を指定する必要があります。ホスト言語修飾子値は、ADA、CC、CC=VAXC、CC=DECC、COBOL、FORTRAN、PASCALおよびPLIです。

CC SQLプリコンパイラ・スイッチについては、次の点に注意します。

pre-qualifiers

SQLプリコンパイラのコマンドラインで許可されるオプションの修飾子を示します。

SQLOPTIONS= (QUERY_CPU_TIME_LIMIT=total-seconds)

問合せの実行を最適化するために必要なCPUタイムの合計を制限します。問合せが最適化されておらず、CPUタイムの制限に達するまでに実行の準備が整わない場合、エラー・メッセージが返されます。

デフォルトでは、問合せのコンパイル時間に制限はありません。動的SQLオプションは、コンパイル修飾子から継承されます。

SQLOPTIONS= (QUERY_ESTIMATES)

SQLOPTIONS= (NOQUERY_ESTIMATES)

SQLCA構造体の推定行数および推定ディスクI/O操作数を返すかどうかを指定します。QUERY_ESTIMATESキーワードを指定すると、SQLCA.SQLERRD[2]フィールドに推定行数が返され、SQLCA.SQLERRD[3]フィールドに推定ディスクI/O操作数が返されます。通常、SQLCA.SQLERRD[2]およびSQLCA.SQLERRD[3]の値は、表に対してOPEN文を実行した後は0です。

デフォルトはSQLOPTIONS=QUERY_ESTIMATES修飾子です。

SQLOPTIONS= (QUERY_MAX_ROWS=total-rows)

問合せ処理時に返されるレコード数を制限します。この場合、問合せで返される行数がカウントされ、問合せが指定した合計行数を超えるとエラー・メッセージが表示されます。

デフォルトでは、フェッチされるレコード数は制限されません。動的SQLオプションは、コンパイル修飾子から継承されます。

SQLOPTIONS= (QUERY_TIME_LIMIT=total-seconds)

問合せ処理時に返されるレコード数を制限します。この場合、問合せの処理に要する秒数がカウントされ、問合せが指定した合計秒数を超えるとエラー・メッセージが表示されます。

デフォルトでは、問合せのコンパイル時間に制限はありません。動的SQLオプションは、コンパイル修飾子から継承されます。

QUIET COMMIT ON

QUIET COMMIT OFF

QUIET COMMIT ON句を使用すると、アクティブなトランザクションがないときにCOMMIT文とROLLBACK文のいずれかが実行された場合、これらの文のエラー・レポートが無効になります。

デフォルトでは、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生します。このデフォルト設定は、この状況を検出する必要があるアプリケーションの下位互換性のために保持されています。QUIET COMMITをONに設定すると、アクティブなトランザクションがなくてもCOMMITまたはROLLBACKは正常に実行されます。

注意

複合文内においてアクティブなトランザクションがない場合、COMMIT文とROLLBACK文は常に無視されます。

SQLOPTIONS= (ROLLBACK_ON_EXIT)

プログラムでSQLが終了するときに未処理のトランザクションをロールバックします。

OpenVMSのデフォルトでは、プログラムでSQLが終了するときに未処理のトランザクションはコミットされます。このため、変更をロールバックする必要がある場合は、この修飾子をコマンドラインに指定します。

SQLOPTIONS= (TRANSACTION_DEFAULT = IMPLICIT)

SQLOPTIONS= (TRANSACTION_DEFAULT = DISTRIBUTED)

SQLOPTIONS= (NOTRANSACTION_DEFAULT)

トランザクションを開始するタイミングとデフォルトの分散トランザクションの処理方法を指定します。次のオプションを指定できます。

デフォルトはSQLOPTIONS = (TRANSACTION_DEFAULT = IMPLICIT)です。

SQLOPTIONS= (USER_DEFAULT=username)

コンパイル時のユーザー名を指定します。

規格DECLARE ALIAS文のUSER DEFAULT句を使用する場合、この修飾子を使用して、コンパイル時のユーザー名をプログラムに渡します。

SQLOPTIONS= WARN

SQLOPTIONS= NOWARN

事前に処理されたホスト言語ソース・ファイルとSYS$ERRORおよびSYS$OUTPUT(SYS$ERRORとは異なる場合)に情報メッセージと警告メッセージをSQLプリコンパイラによって書き込むかどうかを指定します。WARN修飾子には、次のオプションを使用できます。