3.6 SQLモジュール言語プロセッサ・コマンドライン
記号を定義することにより、SQLモジュール・プロセッサを起動しやすくなります。次に例を示します。
$ SQLMOD == "$SQL$MOD" |
モジュール・ファイル仕様の有無にかかわらず、SQLモジュール・プロセッサを起動できます。
$ SQLMOD INPUT FILE> module-file-specification |
$ SQLMOD module-file-specification |
いずれの方法でも、SQLプロセッサによるモジュール・ファイルの処理方法を制御するいくつかの修飾子を、ファイル仕様とともに指定できます。次の構文図は、これらの修飾子の形式を示しています。
ALIGN_RECORDS
NOALIGN_RECORDS
SQLモジュール・プロシージャのレコード・パラメータ内のフィールドを位置合せします。OpenVMS Alphaプラットフォームを使用し、ホスト言語がCの場合、デフォルトはALIGN_RECORDSです。それ以外の場合、OpenVMS AlphaプラットフォームでのデフォルトはNOALIGN_RECORDSです。
C_PROTOTYPES=file-name
NOC_PROTOTYPES
この修飾子は廃止予定であり、将来のリリースではサポートされません。PROTOTYPES修飾子に置き換えられています。C_STRING=[NO]BLANK_FILL
C_STRING=[NO]FIXED_CDD_STRINGS
C_STRING=([NO]BLANK_FILL,[NO]FIXED_CDD_STRINGS)
Cホスト言語文字列を処理する方法を指定します。
- [NO]BLANK_FILL(デフォルト: BLANK_FILL)
SQL89およびANSI/ISO SQL規格によって要求されるように空白でC文字列を埋めるかどうか、またはソース文字列の最後のデータ・バイトの後ろにヌル終端文字を配置するかどうかを制御します。- [NO]FIXED_CDD_STRINGS(デフォルト: NOFIXED_CDD_STRINGS)
Oracle CDD/リポジトリ・レコード定義のC文字列を固定長文字列またはCヌル終端文字列として処理するかどうかを制御します。
c-string-options
SQLでCホスト言語文字列を処理する方法を制御します。C_STRING修飾子とともに[NO]BLANK_FILLキーワードと[NO]FIXED_CDD_STRINGSキーワードのいずれかまたは両方を使用して、C文字列の特性を制御します。
CONNECT
NOCONNECT
複数のユーザー・セッションを許可し、複数のモジュールにわたるグローバル・データベースにアクセスできるようにするかどうかを制御します。アプリケーション内のすべてのSQLモジュールは、接続が有効または無効の状態でコンパイルする必要があります。デフォルトの設定はNOCONNECTです。
CONSTRAINT_MODE=IMMEDIATE
CONSTRAINT_MODE=DEFERRED
CONSTRAINT_MODE=ON
CONSTRAINT_MODE=OFF
必要に応じて、SQLモジュール言語のコマンドラインにCONSTRAINT_MODE=IMMEDIATEまたはCONSTRAINT_MODE=DEFERRED修飾子を指定して、コミット時の制約に対するデフォルトの制約評価モードを設定できます。(この修飾子は、動詞実行時の制約の評価には影響しません。)デフォルトはDEFERREDです。つまり、コミット時の制約はコミット時に評価されます。制約にONを設定すると、SET ALL CONSTRAINTS OFF文が発行されるまで、またはトランザクションがコミット操作またはロールバック操作で完了するまでは、影響を受ける各制約はすぐに、および各文の終わりに評価されます。
SET ALL CONSTRAINTS文によって、CONSTRAINT_MODE=IMMEDIATE修飾子またはCONSTRAINT_MODE=DEFERRED修飾子がオーバーライドされます。
ANSI規格のSQLとの互換性が必要な場合は、制約をIMMEDIATEとして設定する必要があります。ただし、ほとんどの場合は、デフォルト設定(CONSTRAINT_MODE=DEFERRED)で十分です。
IMMEDIATEのかわりにONキーワードを、DEFERREDのかわりにOFFキーワードを使用できます。
CONTEXT=
特定の分散トランザクションのコンテキスト内でモジュール言語プロシージャを実行するよう、SQLモジュール・プロセッサに指示します。この修飾子を使用すると、プロシージャに対して追加のパラメータが生成され、プロシージャ内で最後に宣言されたパラメータとして配置されます。CONTEXT=修飾子には、次のオプションを指定できます。
- NONE
SQLモジュール・プロセッサがモジュール内のいずれかのプロシージャにコンテキスト・パラメータを追加しないように指定します。- ALL
SQLモジュール・プロセッサがモジュール内のすべてのプロシージャにコンテキスト・パラメータを追加するように指定します。- procedure-list
SQLモジュール・プロセッサがリスト内の各プロシージャにコンテキスト・パラメータを追加するように指定します。リストのプロシージャに対するエントリ名を指定すると、SQLモジュール・プロセッサによって、指定された名前にプロシージャ名が変更されます。
たとえば、コマンドライン上に次の修飾子を指定できます。
/CONTEXT=(OPEN_PROC :OPEN_PROC_DIST, FETCH_PROC :FETCH_PROC_DIST,- CLOS_PROC :CLOS_PROC_DIST)
コンテキスト・パラメータは、OPEN_PROC、FETCH_PROCおよびCLOS_PROCの各プロシージャに渡され、指定された新しいプロシージャ名が付けられます。詳細は、『Oracle Rdb7 Guide to Distributed Transactions』を参照してください。
アプリケーションではコンテキスト構造体を使用して、ホスト言語プログラムから分散トランザクションに関連するモジュール内のプロシージャに、分散TIDのアドレスを渡す必要があります。コンテキスト構造体は、トランザクションがすでに開始されていて実行できないSQL文、またはDECdtmシステム・サービスが明示的にコールされていて使用できないSQL文以外の実行SQL文を含むプロシージャに渡します。第2.9節には、コンテキスト構造体を取得しない非実行可能文がリストされています。
また、CONTEXT修飾子を使用して、プロシージャに新しい名前を指定することもできます。
CONTEXT修飾子とともに使用する修飾子では、コンテキスト・パラメータを受け取るプロシージャ、およびそのプロシージャ名を変更するかどうかを指定します。
分散トランザクションではバッチ更新トランザクションを使用できないため、バッチ更新トランザクションを開始する前にSQL$DISABLE_CONTEXT論理名をTRUEに定義する必要があります。(分散トランザクションでは、トランザクションがロールバック可能であることが必要です。バッチ更新トランザクションではリカバリ・ユニット・ジャーナル・ファイル(.ruj)への書込みが行われないため、ロールバックできません。)
バッチ更新トランザクションを使用して分散トランザクションの開始を試行した場合の結果は、次に示すように、DECdtmシステム・サービスのコールを暗黙的または明示的のどちらで行うか、およびトランザクションの開始に何のSQL文を使用するかによって異なります。
- バッチ更新トランザクションを開始してDECdtmシステム・サービスを明示的にコールすると、コンパイル時にエラーが返されます。
- バッチ更新トランザクションを開始してDECdtmシステム・サービスを暗黙的にコールすると、次のアクションが実行されます。
- BATCH UPDATE句を指定したSET TRANSACTION文を使用すると、非分散トランザクションが開始されます。
- BATCH UPDATE句を指定したDECLARE TRANSACTION文を使用すると、コンパイル時にエラーが返されます。
2フェーズ・コミットのプロトコルは分散トランザクションにのみ適用されます。分散トランザクションの詳細は、『Oracle Rdb7 Guide to Distributed Transactions』を参照してください。
context-file-name
context-file-nameは、プログラムのコンパイルおよび実行時に適用するDECLARE文を含むSQLコマンド・プロシージャです。context-file-nameの詳細は、第2.11節を参照してください。database-options
指定したデータベース型にアクセスするためのプログラムがSQLモジュール・プロセッサによって処理されるよう指定します。データベース・オプションの詳細は、第2.10節を参照してください。
DEPRECATE
NODEPRECATE
DEPRECATE修飾子およびNODEPRECATE修飾子を使用して、廃止予定の機能に関する診断メッセージをSQLモジュール・プロセッサによって書き込むかどうかを指定します。廃止予定の機能とは、現在は使用可能ですがSQLの将来のバージョンでは使用できなくなる機能、つまり、旧式の機能です。たとえば、廃止予定の機能の1つに、VERB TIMEではなくVERB_TIMEなどの旧式のキーワードを使用する機能があります。廃止予定の機能の完全なリストは、対話型SQLのヘルプ・ユーティリティによってオンラインで表示されます。
廃止予定の機能に関するメッセージ以外のすべての警告メッセージを表示する必要がある場合、WARN=WARNING修飾子を指定できます。廃止予定の機能に関するメッセージのみを表示する必要がある場合、WARN=(NOWARNING, DEPRECATE)修飾子を指定できます。WARN修飾子は単独では、情報メッセージ、警告メッセージおよび廃止予定の機能に関するメッセージを書き込むWARN=(WARNING, DEPRECATE)修飾子に相当します。NOWARN修飾子は単独では、どのメッセージも書き込まないWARN=(NOWARNING, NODEPRECATE)修飾子に相当します。
EXTERNAL_GLOBALS
NOEXTERNAL_GLOBALS
別名参照を強制的に別名定義として処理するかどうかを指定します。別名定義は、DECLARE ALIAS文でGLOBALキーワード(デフォルト)を使用して宣言された別名です。別名参照は、DECLARE ALIAS文でEXTERNALキーワードを使用して宣言された別名です。EXTERNAL_GLOBALS修飾子により、別名参照は別名定義として処理されます。この修飾子は、V7.0より前のバージョンとの互換性を提供します。
NOEXTERNAL_GLOBALS修飾子により、別名参照は別名参照として処理されます。アプリケーションによって複数の共有可能なイメージ間で別名が共有される場合、OpenVMSではNOEXTERNAL_GLOBALS修飾子が便利です。
デフォルトの設定はEXTERNAL_GLOBALSです。
別名定義と別名参照の詳細は、「DECLARE ALIAS文」を参照してください。別名と共有可能イメージの使用方法の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。
FLAG_NONSTANDARD
FLAG_NONSTANDARD=SQL92_ENTRY
FLAG_NONSTANDARD=SQL89
FLAG_NONSTANDARD=MIA
NOFLAG_NONSTANDARD
SQLで非標準構文が識別されるかどうかを指定します。非標準構文は拡張機能と呼ばれ、ANSI/ISO SQL規格またはマルチベンダー・インテグレーション・アーキテクチャ(MIA)規格の一部ではない構文を示します。次のオプションを指定できます。
- FLAG_NONSTANDARD
構文がANSI/ISO SQL規格の拡張機能であることを通知します。- FLAG_NONSTANDARD=SQL92_ENTRY
構文がANSI/ISO SQL規格の拡張機能であることを通知します。この修飾子には、FLAG_NONSTANDARD修飾子と同じフラグ付けの効果があります。- FLAG_NONSTANDARD=SQL89
構文がANSI/ISO 1989規格の拡張機能であることを通知します。- FLAG_NONSTANDARD=MIA
構文がMIA規格の拡張機能であることを通知します。- NOFLAG_NONSTANDARD
拡張機能の通知を防止します。
拡張機能の通知の防止(NOFLAG_NONSTANDARD)がデフォルトです。
FLOAT=D_FLOAT
FLOAT=G_FLOAT
FLOAT=IEEE_FLOAT
/FLOAT修飾子によって、単精度浮動小数点または倍精度浮動小数点のSQLデータ型として宣言されているSQLモジュール言語プロシージャ・パラメータの、SQLモジュール言語による変換方法が決まります。SQLの浮動小数点データ型には、FLOAT(n)、REALおよびDOUBLE PRECISIONがあります。詳細は、第2.3節を参照してください。Oracle Rdb内部では、単精度浮動小数点型はF浮動小数点として表され、倍精度浮動小数点型はG浮動小数点として表されます。詳細は、表3-2を参照してください。デフォルトでは、単精度浮動小数点型または倍精度浮動小数点型として宣言されたパラメータは、コール側ホスト言語プログラムによって、それぞれF浮動小数点形式およびG浮動小数点形式で渡されます。これは、SQL$MODコマンドで/FLOAT=G_FLOAT修飾子を使用することと同じです。
SQL$MODのコマンドラインで/FLOAT=D_FLOATが指定されると、単精度浮動小数点型および倍精度浮動小数点型のパラメータは、それぞれF浮動小数点形式およびD浮動小数点形式に変換されます。SQLモジュール言語では、倍精度のパラメータは入力と出力の両方において、D浮動小数点形式およびG浮動小数点形式の間で変換されます。
SQL$MODのコマンドラインで/FLOAT=IEEE_FLOATが指定されると、単精度浮動小数点型および倍精度浮動小数点型のパラメータは、それぞれIEEE S浮動小数点形式およびIEEE T浮動小数点形式に変換されます。SQLモジュール言語では、入力と出力の両方において、これらの形式および内部のF浮動小数点形式とG浮動小数点形式の間で変換されます。
SQLモジュール言語プロシージャのパラメータがレコード型の場合、レコードの浮動小数点型のフィールドは、前述の説明と同じルールに従います。
ホスト言語プログラムの実パラメータの浮動小数点形式は、SQLモジュール言語の実パラメータの形式と一致する必要があります。(実パラメータおよび仮パラメータの一致の詳細は、第3.5節を参照してください。)
注意
Oracle Rdbでは、それぞれF浮動小数点(F_FLOAT)およびG浮動小数点(G_FLOAT)と呼ばれるVAX 32ビット型とVAX 64ビット型を使用して、浮動小数点数が内部的に格納されます。つまり、ホスト言語プログラムでIEEE形式が使用される場合、VAX形式とIEEE形式間で変換が行われます。VAX形式とIEEE形式では、小数部と指数で使用可能なビット数が異なります。また、IEEE形式には、無限値用に予約されている特定の指数値があります。これらの相違が原因で、変換プロセス中に浮動小数点のオーバーフローやアンダーフローおよび丸めエラーが発生する可能性があります。VAX浮動小数点形式とIEEE浮動小数点形式での最大値と最小値のデータの詳細は、OpenVMSオペレーティング・システム・ドキュメントの『Portable Mathematics Library』の付録Aを参照してください。/FLOAT=IEEE_FLOATが使用されている場合、浮動小数点データ型は共通データ・ディクショナリからインポートされない場合があります。
G_FLOAT
NOG_FLOAT
/G_FLOAT修飾子と/NOG_FLOAT修飾子は、下位互換性を確保するためのものです。これらの修飾子はそれぞれ、/FLOAT=G_FLOATと/FLOAT=D_FLOATに相当します。/FLOAT修飾子と/[NO]G_FLOAT修飾子の両方は指定しないでください。INITIALIZE_HANDLES
NOINITIALIZE_HANDLES
別名定義を強制的に別名参照として処理するかどうかを指定します。NOINITIALIZE_HANDLES修飾子を使用すると、すべての別名宣言が別名参照として処理されます。別名定義は、DECLARE ALIAS文でGLOBALキーワード(デフォルト)を使用して宣言された別名です。別名参照は、DECLARE ALIAS文でEXTERNALキーワードを使用して宣言された別名です。
NOINITIALIZE_HANDLES修飾子は、OpenVMSにおいて既存のソース・コードで別名定義を強制的に別名参照として処理するときに便利です。OpenVMSでは通常、定義と参照は区別されないため、別名参照が必要なときにアプリケーションで別名定義を宣言できます。別名を共有する複数のイメージにアプリケーションを再編成する場合、別名定義と別名参照を区別する必要があります。この場合、NOINITIALIZE_HANDLES修飾子を使用して、ソース・コードを変更せずに定義を強制的に参照として処理します。
アプリケーションでEXTERNALキーワードを使用して別名参照が正しく宣言された場合、[NO]INITIALIZE_HANDLESのかわりにNOEXTERNAL_GLOBALS修飾子を使用して、OpenVMSでデフォルトをオーバーライドし、別名参照が参照として正しく処理されるようにします。
デフォルトの設定はINITIALIZE_HANDLESです。この修飾子により、[NO]EXTERNAL_GLOBALS修飾子はオーバーライドされます。
この修飾子は、Oracle Rdbの以前のバージョンとの互換性を確保するために保持されます。V7.0以上の場合、[NO]EXTERNAL_GLOBALS修飾子を使用します。これにより、別名定義がより正確に制御されます。別名定義と別名参照の詳細は、「DECLARE ALIAS文」を参照してください。別名と共有可能イメージの使用方法の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。
LIST
NOLIST
元のモジュール・リストおよび処理中に生成されたエラー・メッセージを含むリスト・ファイルをSQLモジュール・プロセッサで作成するかどうかを決定します。また、作成する場合はその名前を決定します。デフォルトはNOLIST修飾子です。LIST修飾子を指定するときにファイル仕様を含めない場合、SQLモジュール・プロセッサによりファイル拡張子.lisを使用してモジュール・ソース・ファイルと同じ名前でリスト・ファイルが作成されます。LOWERCASE_PROCEDURE_NAMES
NOLOWERCASE_PROCEDURE_NAMES
モジュール言語プロシージャ名を強制的に小文字にします。この修飾子により、SQLモジュール・プロシージャ名は小文字とみなされ、引用されたSQLモジュール・プロシージャの大文字はすべて小文字でオーバーライドされます。デフォルトの設定はNOLOWERCASE_PROCEDURE_NAMESです。
MACHINE_CODE
NOMACHINE_CODE
Oracle Rdb for OpenVMS Alphaにおいて、リスト・ファイル(.lis)にマシン・コードを含めるかどうかを決定します。ただし、マシン・コードが含まれるリスト・ファイルを生成するには、LIST修飾子も指定する必要があります。デフォルトはNOMACHINE_CODE修飾子です。
module-file-spec
SQLモジュール・ソース・ファイルのファイル仕様です。ソース・ファイルのデフォルトのファイル拡張子は.sqlmodです。module-qualifiers-1
module-qualifiers-2
SQLモジュール・プロセッサのコマンドラインにオプションで適用できる一連の修飾子です。no-qualifiers-1
no-qualifiers-2
接頭辞NOを追加すると、このグループの修飾子を否定できます。OBJECT
NOOBJECT
ソース・ファイルのコンパイルによって致命的エラーが発生しないときにオブジェクト・ファイルを作成するかどうかを指定します。また、オブジェクト・ファイルを作成する場合、ファイルの名前も指定します。デフォルトはOBJECT修飾子です。OBJECT修飾子を指定するときにファイル仕様を含めない場合、ファイル拡張子.objを使用してソース・ファイルと同じ名前でオブジェクト・ファイルが作成されます。OPTIMIZATION_LEVEL optimization_option
SQLモジュール言語プログラム内のすべての問合せを処理するために使用されるオプティマイザ計画を指定します。選択可能なオプションは、次のとおりです。
- AGGRESSIVE_SELECTIVITYオプション: 選択する行数が少ないと想定される場合。
- DEFAULTオプション: Oracle RdbのデフォルトであるFAST_FIRSTおよびDEFAULT SELECTIVITYを受け入れる場合。
- FAST_FIRSTオプション: これにより全体のスループットが低下しても、できるかぎり速やかにデータをユーザーに返す場合。
- SAMPLED_SELECTIVITYオプション: 問合せでリテラルを使用して索引に関する予備評価を実行する場合。
- TOTAL_TIMEオプション: プログラムを最高速度で実行し、すべてのデータをできるかぎり速やかに返す場合。アプリケーションがバッチで実行され、問合せ内のすべてのレコードがアクセスされ、レポートの更新または書込みが行われる場合、TOTAL_TIMEを指定する必要があります。
TOTAL_TIMEオプションまたはFAST_FIRSTオプションは、AGGRESSIVE_SELECTIVITYオプションまたはSAMPLED_SELECTIVITYオプションとともに選択できます。キーワードを区切るにはカンマを使用し、リストは丸カッコで囲みます。
次の例は、OPTIMIZATION_LEVEL修飾子の使用方法を示しています。
$ SQL$MOD/OPTIMIZATION_LEVEL=(TOTAL_TIME,SAMPLED_SELECTIVITY) APPCODE.SQLMOD
OPTIMIZE WITH句またはOPTIMIZE_FOR句が明示的に含まれる問合せは、OPTIMIZATION_LEVEL修飾子を使用して確立された設定の影響は受けません。
最適化レベル修飾子は、静的SQL問合せのオプティマイザ計画を変更するために使用します。ただし、OPTIMIZATION_LEVEL修飾子によって設定されたデフォルトのオプティマイザ計画は、最上レベルのSELECT文に設定されたデフォルトのオプティマイザ計画によってオーバーライドできます。
一方、SET OPTIMIZATION LEVEL文の場合は、動的SQL問合せのコンパイルのみに関する問合せ最適化レベルを指定します。この文は、SQLのコンパイル時の環境や静的問合せの実行時環境には影響しません。
PACKAGE_COMPILATION
NOPACKAGE_COMPILATION
パッケージ仕様をACSライブラリ内に作成およびロードするかどうかを決定します。NOPACKAGE_COMPILATION修飾子を指定せずに、モジュール・ヘッダーにLANGUAGE ADA句を指定してモジュールを処理すると、Oracle Rdbでパッケージ仕様が作成されます。NOPACKAGE_COMPILATION修飾子を指定すると、パッケージ仕様はACSライブラリにロードされません。ただし、.adaファイルの作成およびコンパイルが実行されます。
デフォルトはPACKAGE_COMPILATION修飾子です。
PARAMETER_CHECK
NOPARAMETER_CHECK
プロシージャに宣言された仮パラメータの数とプロシージャのSQL文で指定されているパラメータの数をSQLモジュール・プロセッサで比較するかどうかを指定します。
- PARAMETER_CHECK(デフォルト)
パラメータ数が一致するかどうかがチェックされ、一致しない場合は実行時(コンパイル時ではありません)にエラーが生成されます。- NOPARAMETER_CHECK
モジュールのコンパイル時間を短縮するためにパラメータのチェックを一時停止します。SQLモジュールのデバッグ終了後、NOPARAMETER_CHECK修飾子の使用を検討します。
デフォルトでは、パラメータ数がチェックされます。モジュールのコンパイル時間を短縮するには、NOPARAMETER_CHECK修飾子を明示的に使用する必要があります。
PASSWORD_DEFAULT=password
コンパイル時のユーザーのパスワードを指定します。DECLARE ALIAS文のUSING DEFAULT句を使用する場合、この修飾子を使用して、コンパイル時のユーザーのパスワードをプログラムに渡します。
PROTOTYPES[=prototypesfile]
NOPROTOTYPES
PROTOTYPES修飾子では、モジュールのLANGUAGE句を使用して、C(C++)、PascalおよびBLISSの各言語に対するルーチン宣言が生成されます。その他すべての言語値に対しては、この修飾子は無視されます。プロトタイプ・ファイル仕様のデフォルトは、モジュール言語ソースと同一のデバイス、ディレクトリおよびファイル名です。ファイル・タイプのデフォルトは、Cの場合は.h、Pascalの場合は.PAS、およびBLISSの場合は.REQです。
BLISS言語では、PROTOTYPES修飾子によって、各SQLモジュール言語プロシージャに対するEXTERNAL ROUTINE宣言が生成されます。
Pascal言語では、生成された外部プロシージャ宣言はPascalプログラムまたはモジュールに含めることに適しています。SQLモジュール言語プロシージャで使用される構造化型(RECORD ... END RECORD)、SQLDA、およびSQLCAは、これらの外部定義を経由した構造体の受渡しを簡易化するために、UNSAFEバイト配列として宣言されます。ただし、この宣言の形式ではPascalの強力な型チェックが無効になるため、注意する必要があります。
C言語に対する出力にはプリプロセッサ・ディレクティブが含まれ、条件付きでC++のextern C構文を含んだり、複数の#include参照を使用できます。
デフォルトの設定はNOPROTOTYPESです。
QUERY_CPU_TIME_LIMIT=total-seconds
問合せの実行を最適化するために必要なCPUタイムの合計を制限します。問合せが最適化されておらず、CPUタイムの制限に達するまでに実行の準備が整わない場合、エラー・メッセージが返されます。デフォルトでは、問合せのコンパイル時間に制限はありません。動的SQLオプションは、コンパイル修飾子から継承されます。
QUERY_ESTIMATES
NOQUERY_ESTIMATES
SQLCA構造体の推定行数および推定ディスクI/O操作数を返すかどうかを指定します。デフォルトのQUERY_ESTIMATES修飾子を指定すると、SQLCA.SQLERRD[2]フィールドに推定行数が返され、SQLCA.SQLERRD[3]フィールドに推定ディスクI/O操作数が返されます。通常、SQLCA.SQLERRD[2]およびSQLCA.SQLERRD[3]の値は、表に対してOPEN文を実行した後は0です。次の例は、INTRO_PERSONNELデータベースにアクセスする文による対話型SQLの出力を示しています。このデータベースは、モジュール言語のコマンドラインでQUERY_ESTIMATES修飾子を指定したサンプル・プログラムSQL$INTRO_LOAD_EMPL_C.SQLMODを使用してロードされています。SQLCA.SQLERRD[2]フィールドは、推定行数が100行であることを示しています。SQLCA.SQLERRD[3]フィールドは、推定ディスクI/O操作数が16であることを示しています。
$ SQL$ SQL> ATTACH 'FILENAME intro_personnel'; SQL> DECLARE MY_CURSOR cont> TABLE CURSOR FOR cont> SELECT * FROM EMPLOYEES; SQL> OPEN MY_CURSOR; SQL> SHOW SQLCA; SQLCA: SQLCAID: SQLCA SQLCABC: 128 SQLCODE: 0 SQLERRD: [0]: 0 [1]: 0 [2]: 100 [3]: 16 [4]: 0 [5]: 0 SQLWARN0: SQLWARN1: SQLWARN2: SQLWARN3: SQLWARN4: SQLWARN5: SQLWARN6: SQLWARN7:
QUERY_MAX_ROWS=total-rows
問合せ処理時に返されるレコード数を制限します。この場合、問合せで返される行数がカウントされ、問合せが指定した合計行数を超えるとエラー・メッセージが表示されます。デフォルトでは、フェッチされるレコード数は制限されません。動的SQLオプションは、コンパイル修飾子から継承されます。
QUERY_TIME_LIMIT=total-seconds
問合せ処理時に返されるレコード数を制限します。この場合、問合せの処理に要する秒数がカウントされ、問合せが指定した合計秒数を超えるとエラー・メッセージが表示されます。デフォルトでは、問合せのコンパイル時間に制限はありません。動的SQLオプションは、コンパイル修飾子から継承されます。
ROLLBACK_ON_EXIT
プログラムでSQLが終了するときに未処理のトランザクションをロールバックします。OpenVMSのデフォルトでは、プログラムでSQLが終了するときに未処理のトランザクションはコミットされます。このため、変更をロールバックする必要がある場合は、この修飾子をコマンドラインに指定します。
TRANSACTION_DEFAULT=IMPLICIT
TRANSACTION_DEFAULT=DISTRIBUTED
NOTRANSACTION_DEFAULT
トランザクションを開始するタイミングとデフォルトの分散トランザクションの処理方法を指定します。次のオプションを指定できます。
- TRANSACTION_DEFAULT=IMPLICIT
SET TRANSACTION文か、セッション内の最初の実行SQL文を発行したときにトランザクションが開始されます。- TRANSACTION_DEFAULT=DISTRIBUTED
DECdtmシステム・サービスSYS$START_TRANSによって確立されたデフォルトの分散トランザクションに分散トランザクション識別子(TID)が使用されます。このオプションを使用すると、ホスト言語プログラムでコンテキスト構造体を宣言する必要や、SQLモジュール・プロシージャにコンテキスト構造体を渡す必要がなくなります。また、すべてのカーソルがクローズされるため、SQL_CLOSE_CURSORSルーチンをコールする必要もなくなります。
このオプションを使用する場合、DECdtmシステム・サービスを明示的にコールする必要があります。
このオプションは、マルチベンダー・インテグレーション・アーキテクチャ(MIA)規格の構造化トランザクション定義言語(STDL)をサポートしています。
CONTEXT修飾子にTRANSACTION_DEFAULT=DISTRIBUTEDオプションを指定する場合、コンテキスト構造体を宣言して、CONTEXT修飾子で指定されている文に渡す必要があります。または、CONTEXT=ALLを指定する場合は、分散トランザクションに関与しているほとんどの実行可能文にコンテキスト構造体を渡す必要があります。コンテキスト構造体が不要な実行可能文の詳細は、第2.9節を参照してください。- NOTRANSACTION_DEFAULT
SET TRANSACTION文を実行するまでトランザクションが開始されないようにします。この修飾子を使用する場合、最初にSET TRANSACTION文を発行せずに実行可能文を発行すると、エラーが返されます。