DISCONNECT

DISCONNECT ステートメントは、無保護会話の 1 つ以上の接続を終了させます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、または対話式に呼び出すことができます。 これは実行可能ステートメントですが、動的に準備することはできません。Java™ および REXX では指定できません。

DISCONNECT は、トリガーおよび関数で使用できません。

権限

ステートメントでグローバル変数を参照する場合は、ステートメントの権限 ID が保持する特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • ステートメント内で識別されるグローバル変数に対して、
    • そのグローバル変数に対する READ 特権
    • グローバル変数が含まれるスキーマに対する USAGE 特権
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
>>-DISCONNECT--+-server-name--+--------------------------------><
               +-variable-----+   
               +-CURRENT------+   
               |      .-SQL-. |   
               '-ALL--+-----+-'   

説明

server-name または variable
指定したサーバー名、または指定した変数に入っているサーバー名によってアプリケーション・サーバーを識別します。スキーマ名で修飾すれば、グローバル変数を使用することもできます。変数を指定する場合
  • その変数は、文字ストリング変数でなければなりません。
  • 標識変数を伴っていてはなりません。
  • サーバー名は、その変数内で左寄せし、通常 ID の形成の規則に従っていなければなりません。
  • サーバー名の長さが、変数の長さよりも短い場合、右側をブランクで埋めなければなりません。

DISCONNECT ステートメントが実行される時点で、指定したサーバー名または変数に入っているサーバー名は、 その活動化グループの既存の休止接続、または現行接続を識別していなければなりません。 識別された接続は、保護会話を使用できません。

CURRENT
活動化グループの現行接続を識別します。活動化グループは接続状態でなければなりません。 その現行接続は、保護会話を使用してはなりません。
ALL または ALL SQL
活動化グループの既存のすべての接続 (ローカルおよびリモートの接続の両方) を識別します。 このステートメントの実行時に接続が存在しない場合、エラーや警告は起こりません。 接続は、いずれも保護会話を使用することはできません。

DISCONNECT と CONNECT (タイプ 1): CONNECT (タイプ 1) の使用は、 DISCONNECT の使用を妨げることはありません。

接続制限: 識別される接続は、 現行作業単位の過程で SQL ステートメントを実行するのに使用された接続であってはならず、 また保護会話の接続であってはなりません。 保護会話の接続を終了するには、RELEASE ステートメントを使用します。 ローカル接続は、保護会話と見なされることはありません。

DISCONNECT ステートメントは、コミット操作の直後に実行しなければなりません。 DISCONNECT が現行接続の終了に使用される場合、次に実行される SQL ステートメントは、 CONNECT または SET CONNECTION でなければなりません。

ROLLBACK は、DISCONNECT によって終了した接続を再接続することはありません。

切断成功: DISCONNECT ステートメントが正常に実行された場合は、 識別された接続はそれぞれ終了します。 現行接続が遮断されると、その活動化グループは未接続状態になります。

DISCONNECT は、カーソルをクローズし、リソースを解放し、その接続のそれ以上の使用を防止します。

DISCONNECT ALL は、ローカル・アプリケーション・サーバーとの接続を終了させます。接続に、WITH HOLD 文節を指定して定義されたオープン・カーソルがある場合でも、接続は終了します。

接続失敗: DISCONNECT ステートメントが正常に実行 されなかった場合は、その活動化グループの接続状態、およびその 接続の状態は変わりません。

リモート接続のリソースに関する考慮事項: リモート接続を作成し維持するためには、リソースが必要です。したがって、再使用の予定がないリモート接続は、できるだけ早く終了するようにする必要があり、 再使用の予定があるリモート接続は、遮断されないようにする必要があります。

例 1 : TOROLAB1 との接続は不要になりました。 次のステートメントは、コミット操作の後で実行されます。

   EXEC SQL DISCONNECT TOROLAB1;

例 2 : 現行接続は不要になりました。 次のステートメントは、コミット操作の後で実行されます。

   EXEC SQL DISCONNECT CURRENT;

例 3 : 既存の接続は不要になりました。 次のステートメントは、コミット操作の後で実行されます。

   EXEC SQL DISCONNECT ALL;