SQL 解説書

CONNECT (タイプ 2)

CONNECT (タイプ 2) ステートメントは、 指定したアプリケーション・サーバーにアプリケーション・プロセスを接続し、 アプリケーション制御の分散作業単位の規則を確立します。 このサーバーは、そのプロセスの現行サーバーになります。

概念と詳細については、アプリケーション制御の分散作業単位 を参照してください。

CONNECT (タイプ 1) ステートメントのほとんどの性質は、 CONNECT (タイプ 2) ステートメントにも適用されます。 この項では、それらを繰り返して説明するのではなく、 タイプ 2 の要素のうちタイプ 1 とは異なる部分だけを説明します。

呼び出し

呼び出しは 呼び出し の説明と同じです。

許可

許可は 許可 の説明と同じです。

構文

構文は 構文 と同じです。 タイプ 1 とタイプ 2 のどちらを選択するかは、プリコンパイラー・オプションによって決められます。 それらのオプションの概要については、分散作業単位の意味を制御するオプション を参照してください。 詳細については、コマンド解説書 および管理 API 解説書 を参照してください。

説明

TO server-name/host-variable
サーバーの名前のコーディング規則は、タイプ 1 と同じです。

SQLRULES(STD) オプションが有効な場合、サーバー名 (server-name) は、 アプリケーション・プロセスの既存の接続を指定するものであってはなりません。 そのように指定すると、エラー (SQLSTATE 08002) になります。

SQLRULES(DB2) オプションが有効で、 server-name がアプリケーション・プロセスの既存の接続を指定している場合、 その接続が現行接続になり、古い接続は休止状態になります。 つまり、この状況での CONNECT ステートメントの効果は、 SET CONNECTION ステートメントの効果と同じです。

SQLRULES の指定については、分散作業単位の意味を制御するオプション を参照してください。

正常に接続された場合

CONNECT TO ステートメントが正常に実行された場合、

接続が正常に実行されなかった場合

CONNECT TO ステートメントが正常に実行されなかった場合、

CONNECT (オペランドなし) 、 IN SHARE/EXCLUSIVE MODE、USER、 および USING
接続が存在する場合、タイプ 2 の動作はタイプ 1 と同様です。 許可 ID とデータベース別名が、SQLCA の SQLERRMC フィールドに入れられます。 接続が存在しない場合、暗黙接続の試みは行われず、 SQLERRP および SQLERRMC の各フィールドはブランクを戻します。 (アプリケーションでは、これらのフィールドを調べることによって、 現行接続が存在しているか否かの検査を行うことができます。)

USER と USING を含むオペランドのない CONNECT は、DB2DBDFT 環境変数を使用することによって、 アプリケーション・プロセスをデータベースに接続することができます。 この方法は、タイプ 2 の CONNECT RESET に相当しますが、 ユーザー ID とパスワードの使用が可能です。

RESET
デフォルトのデータベースが使用可能な場合、 そのデータベースへの明示接続と同等です。 デフォルトのデータベースが使用できない場合、 アプリケーション・プロセスの接続状態とその接続の状態は変更されません。

デフォルトのデータベースが使用可能か否かは、インストール・オプション、環境変数、 および認証設定値によって決まります。 インストール時の暗黙接続と環境変数については、 概説およびインストール を、 認証設定値については、管理の手引き を参照してください。

規則

タイプ 1 とタイプ 2 の CONNECT ステートメントの比較

CONNECT ステートメントの意味は、CONNECT プリコンパイラー・オプション または SET CLIENT API によって決まります (分散作業単位の意味を制御するオプション を参照)。 CONNECT タイプ 1 または CONNECT タイプ 2 は指定することができ、 それらのプログラムの CONNECT ステートメントは、 それぞれタイプ 1 およびタイプ 2 の CONNECT ステートメントと呼ばれます。 それらの意味について、以下に説明します。

CONNECT TO の使用
タイプ 1 タイプ 2
各作業単位は、1 つのアプリケーション・サーバーに対してのみ接続を確立できます。 各作業単位は、複数のアプリケーション・サーバーとの接続を確立することができます。
他のアプリケーション・サーバーと接続するためには、 その前に、現行の作業単位をコミットまたはロールバックする必要があります。 他のアプリケーション・サーバーと接続する前に、 現行の作業単位をコミットまたはロールバックする必要はありません。
CONNECT ステートメントは、現行接続を確立します。 後続の SQL 要求は、他の CONNECT によって変更されるまで、この接続に送られます。 最初の接続を確立する場合はタイプ 1 の CONNECT と同じです。 休止接続に切り替える際に SQLRULES が STD に設定されている場合には、 SET CONNECTION ステートメントを使用する必要があります。
現行接続への接続が有効であり、現行接続を変更しません。 SQLRULES プリコンパイラー・オプションが DB2 に設定されている場合は、 タイプ 1 の CONNECT と同じです。 SQLRULES が STD に設定されている場合、SET CONNECTION ステートメントを使用する必要があります。
他のアプリケーション・サーバーに接続すると、現行接続が切断されます。 新しい接続が現行接続になります。 1 つの作業単位で維持される接続は 1 つだけです。 別のアプリケーション・サーバーに接続すると、 現行接続は休止状態 になります。 新しい接続が現行接続になります。 1 つの作業単位で複数の接続を維持できます。

CONNECT が休止接続のアプリケーション・サーバーに対するものである場合、 それが現行接続になります。

CONNECT を使用した休止接続への接続は、 SQLRULES(DB2) が指定されている場合にのみ可能です。 SQLRULES(STD) が指定されている場合は、 SET CONNECTION ステートメントを使用する必要があります。

SET CONNECTION ステートメントはタイプ 1 の接続でサポートされていますが、 有効な接続先は現行接続だけです。 タイプ 2 の接続では、 接続状態を休止から現行に変更する SET CONNECTION ステートメントがサポートされています。

CONNECT...USER...USING の使用
タイプ 1 タイプ 2
USER...USING 文節を使用した接続では、現行接続が切断され、 指定した許可名とパスワードで新しい接続が確立されます。 USER/USING 文節を使用した接続は、 指定したその同じサーバーに対する現行接続も休止接続もない場合にのみ、 受け入れられます。

暗黙の CONNECT、CONNECT RESET の使用、 および切断
タイプ 1 タイプ 2
CONNECT RESET を使用して、現行接続を切断することができます。 CONNECT RESET は、デフォルトのアプリケーション・サーバーがシステムに定義されている場合、 それに対する明示的接続に相当します。

接続は、COMMIT の正常実行時にアプリケーションによって切断できます。 コミットの前には、RELEASE ステートメントを使用して、接続を解放保留にします。 このような接続はすべて、その次の COMMIT 時に切断されます。

あるいは RELEASE ステートメントの代わりに、 プリコンパイラー・オプションの DISCONNECT(EXPLICIT)、DISCONNECT(CONDITIONAL)、 DISCONNECT(AUTOMATIC)、 または DISCONNECT の各ステートメントを使用することができます。

CONNECT RESET を使用して現行接続を切断した場合、 その次の SQL ステートメントが CONNECT ステートメントでなく、 デフォルトのアプリケーション・サーバーがシステムに定義されているなら、 それに対する暗黙接続が行われます。 デフォルトのアプリケーション・サーバーがシステムに定義されている場合、 CONNECT RESET はそれに対する明示接続に相当します。
連続して CONNECT RESET を出すと、エラーになります。 連続する CONNECT RESET を発行してエラーになるのは、 SQLRULES(STD) が指定されている場合だけです。 このオプションを指定すると既存の接続に対して CONNECT を使用できなくなります。
CONNECT RESET では、現行の作業単位のコミットも暗黙のうちに行われます。 CONNECT RESET では、現行の作業単位はコミットされません。
何らかの理由で既存の接続がシステムによって切断された場合、 このデータベースに対して CONNECT 以外の SQL ステートメントを連続して出すと、 08003 という SQLSTATE を受け取ることになります。 既存の接続がシステムによって切断された場合でも、COMMIT、ROLLBACK、 および SET CONNECTION の各ステートメントを使用することができます。
アプリケーション・プロセスが正常に終了した時点で、作業単位が暗黙のうちにコミットされます。 タイプ 1 と同じ。
アプリケーション・プロセスが終了すると、すべての接続 (1 つだけ) が切断されます。 アプリケーション・プロセスが終了すると、 すべての接続 (現行、休止、および解放保留のもの) が切断されます。

CONNECT のエラー
タイプ 1 タイプ 2
ローカル・ディレクトリーにサーバー名が定義されていないというエラー以外で CONNECT がエラーになった場合、 現行接続があるかどうかに関係なく、アプリケーション・プロセスは未接続状態になります。 それ以降の CONNECT 以外のステートメントは、08003 の SQLSTATE を受け取ることになります。 CONNECT がエラーになったときに現行接続があっても、その現行接続は影響を受けません。

CONNECT がエラーになったときに、現行接続がなかった場合、 プログラムは未接続状態になります。 それ以降の CONNECT 以外のステートメントは、08003 の SQLSTATE を受け取ることになります。

例 1: この例では、複数のソース・プログラム (枠の中に示される) の使用法を示します。 いくつかは異なる接続オプション (コードの上に示される) を指定して前処理され、 そのうち 1 つは SET CLIENT API 呼び出しを含んでいます。

PGM1: CONNECT(2) SQLRULES(DB2) DISCONNECT(CONDITIONAL)

   ...
   exec sql CONNECT TO OTTAWA;
   exec sql SELECT col1 INTO :hv1 
   FROM tbl1;
   ...

PGM2: CONNECT(2) SQLRULES(STD) DISCONNECT(AUTOMATIC)

   ...
   exec sql CONNECT TO QUEBEC;
   exec sql SELECT col1 INTO :hv1 
   FROM tbl2;
   ...

PGM3: CONNECT(2) SQLRULES(STD) DISCONNECT(EXPLICIT)

   ...
   SET CLIENT CONNECT 2  SQLRULES DB2  DISCONNECT EXPLICIT 1
   exec sql CONNECT TO LONDON;
   exec sql SELECT col1 INTO 
:hv1 FROM tbl3;
   ...

1 注: SET CLIENT API の実際の構文ではありません。

PGM4: CONNECT(2) SQLRULES(DB2) DISCONNECT(CONDITIONAL)

   ...
   exec sql CONNECT TO REGINA;
   exec sql SELECT col1 INTO 
:hv1 FROM tbl4;
   ...

アプリケーションが PGM1 に続いて PGM2 を実行すると、次のようになります。

アプリケーションが PGM1 に続いて PGM3 を実行すると、次のようになります。

2 番目の CONNECT ステートメントの前に SET CLIENT API が実行されるため、問題ありません。

アプリケーションが PGM1 に続いて PGM4 を実行すると、次のようになります。

これは、PGM1 のプリプロセッサー・オプションが PGM4 と同じなので、問題ありません。

例 2:

この例では、CONNECT (タイプ 2)、SET CONNECTION、RELEASE、 および DISCONNECT の各ステートメントの相互関係を示します。 S0、S1、S2、および S3 は 4 つのサーバーを示します。
順序 ステートメント 現行サーバー 休止接続 解放保留
0 ステートメントはない なし なし なし
1 SELECT * FROM TBLA S0 (デフォルト値) なし なし
2 CONNECT TO S1 SELECT * FROM TBLB S1 S1 S0 S0 なし なし
3 CONNECT TO S2 UPDATE TBLC SET ... S2 S2 S0、S1 S0、S1 なし なし
4 CONNECT TO S3 SELECT * FROM TBLD S3 S3 S0、S1、S2 S0、S1、S2 なし なし
5 SET CONNECTION S2 S2 S0、S1、S3 なし
6 RELEASE S3 S2 S0、S1 S3
7 COMMIT S2 S0、S1 なし
8 SELECT * FROM TBLE S2 S0、S1 なし
9 DISCONNECT S1 SELECT * FROM TBLF S2 S2 S0 S0 なし なし


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]