SQL 解説書
DISCONNECT ステートメントは、活動状態の作業単位がない場合に (つまり、
コミットまたはロールバックの操作の後)、1 つまたは複数の接続を破棄します。
92
呼び出し
対話式 SQL 機能には外見上対話式の実行に見えるインターフェースが用意されている場合がありますが、
このステートメントはアプリケーション・プログラムに組み込むことだけが可能です。
これは、動的に準備できない実行可能ステートメントです。
許可
必要ありません。
構文
(1)
>>-DISCONNECT----+-server-name------+--------------------------><
+-host-variable----+
+-CURRENT----------+
| .-SQL-. |
'-ALL-+-----+------'
注:
- CURRENT または ALL という名前のアプリケーション・サーバーは、
ホスト変数によってのみ指定することができます。
説明
- server-name または host-variable
- server-name (サーバー名) またはその server-name を含む host-variable (ホスト変数) によって、
アプリケーション・サーバーを指定します。
host-variable (ホスト変数) を指定する場合、
それは、長さ属性が 8 以下の文字ストリング変数でなければならず、
標識変数を含めることはできません。
その host-variable に入っている server-name は、
左寄せする必要があり、引用符で区切ることはできません。
server-name は、
アプリケーション・サーバーを指定するデータベース別名である点に注意してください。
この名前は、アプリケーション・リクエスターのローカル・ディレクトリーにリストされている必要があります。
指定されたデータベース別名、またはホスト変数に含まれているデータベース別名は、
そのアプリケーション・プロセスの既存の接続を指定するものでなければなりません。
データベース別名が既存の接続を指定していない場合、
エラー (SQLSTATE 08003) になります。
- CURRENT
- アプリケーション・プロセスの現行接続を指定します。
アプリケーション・プロセスは、接続された状態でなければなりません。
接続されていない場合、エラー (SQLSTATE 08003) になります。
- ALL
- アプリケーション・プロセスの既存の接続を全部破棄することを指定します。
ステートメント実行時に接続が存在していない場合でも、
エラーまたは警告のメッセージは出されません。
任意に選択できるキーワードである SQL は RELEASE ステートメントの構文との一貫性を持たせるために含められています。
規則
- 一般に、DISCONNECT ステートメントは作業単位の中では実行できません。
実行すると、エラー (SQLSTATE 25000) になります。
この規則の例外は、単一の接続を切断することを指定し、
データベースが既存の作業単位に加わっていない場合です。
この場合、DISCONNECT ステートメントが発行される時に活動状態の作業単位があるかどうかは問題になりません。
- DISCONNECT ステートメントは、
トランザクション処理 (TP) モニター環境の中では全く実行できません (SQLSTATE 25000)。
これは、SYNCPOINT プリコンパイラー・オプションが TWOPHASE に設定されている場合に使用されるものです。
注
- DISCONNECT ステートメントが正常に処理されると、指定されたそれぞれの接続が破棄されます。
DISCONNECT ステートメントが正常に処理されない場合、
アプリケーション・プロセスの接続状態とその接続の状態は変更されません。
- DISCONNECT を使って現行接続を破棄する場合、
その次に実行する SQL ステートメントは、CONNECT または SET CONNECTION でなければなりません。
- タイプ 1 CONNECT では、DISCONNECT を使用できないわけではありません。
ただし、DISCONNECT CURRENT と DISCONNECT ALL は、
使用することはできますが、CONNECT RESET ステートメントの場合と違って、コミット操作は行われません。
タイプ 1 の CONNECT では一度に 1 つの接続しかサポートされないため、
DISCONNECT ステートメントに server-name または host-variable を指定する場合、
それは現行接続を指定するものでなければなりません。
一般に、"規則" に示されている例外を除き、DISCONNECT は作業単位内で実行すると失敗します。
- リモート接続を作成し保守するには、さまざまな資源が必要になります。
したがって、再使用の予定がないリモート接続は、できるだけ破棄する必要があります。
- 接続は、接続オプションの効果のためにコミット操作中に破棄されることもあります。
そのような接続オプションには、AUTOMATIC、CONDITIONAL、または EXPLICIT があります。
それらは、プリコンパイラー・オプションとして設定されたり、実行時に SET CLIENT API によって設定されます。
DISCONNECT オプションの指定については、分散作業単位の意味を制御するオプションを参照してください。
例
例 1:
IBMSTHDB への SQL 接続は、アプリケーションではもはや必要でなくなりました。
コミットかロールバックの操作を行った後、
次のステートメントを実行してその接続を破棄します。
EXEC SQL DISCONNECT IBMSTHDB;
例 2:
現行の接続は、アプリケーションでもはや必要でなくなりました。
コミットかロールバックの操作を行った後、
次のステートメントを実行してその接続を破棄します。
EXEC SQL DISCONNECT CURRENT;
例 3:
既存の接続は、アプリケーションでもはや必要でなくなりました。
コミットかロールバックの操作を行った後、
次のステートメントを実行して接続をすべて破棄します。
EXEC SQL DISCONNECT ALL;
脚注:
- 92
-
DISCONNECT ステートメントの対象が単一の接続の場合、その接続は、
そのデータベースが既存のどの作業単位にも関係しておらず、
しかも活動状態の作業単位がない場合にのみ破棄されます。
たとえば、他のいくつかのデータベースの作業が終了し、
ステートメントの対象については終了していない場合、接続を破棄せずに切断することは可能です。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]