ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 3.6 SQLモジュール言語プロセッサ・コマンドライン

記号を定義することにより、SQLモジュール・プロセッサを起動しやすくなります。次に例を示します。

    $ SQLMOD == "$SQL$MOD"

モジュール・ファイル仕様の有無にかかわらず、SQLモジュール・プロセッサを起動できます。

- モジュール・ファイル仕様なしでSQLモジュール・プロセッサを起動する場合、ファイル仕様の入力を求められます。次に例を示します。

      $ SQLMOD
      INPUT FILE> module-file-specification

- モジュール・ファイル仕様をDCLコマンドラインの一部として使用してSQLモジュール・プロセッサを起動する場合、[Enter]キーを押した直後にモジュール・ファイルの処理が開始されます。次に例を示します。

      $ 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文を発行せずに実行可能文を発行すると、エラーが返されます。