SET CONNECTION

SET CONNECTION ステートメントは、既存の接続の 1 つを識別することによって、 活動化グループの現行サーバーを確立します。

呼び出し

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

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

権限

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

  • ステートメント内で識別されるグローバル変数に対して、
    • そのグローバル変数に対する READ 特権
    • そのグローバル変数を含むライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
>>-SET CONNECTION--+-server-name-+-----------------------------><
                   '-variable----'   

説明

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

以下の説明で S は、指定したサーバー名または変数に入っているサーバー名を表しています。 S は該当のアプリケーション・プロセスの既存の接続を識別していなければなりません。 S が現行の接続を識別している場合は、S の状態およびアプリケーション・プロセスの他の接続すべての状態は変わりませんが、 S に関する情報が SQLCA のフィールド SQLERRP に入れられます。S が休止接続を識別している場合、次の規則が適用されます。

SET CONNECTION ステートメントが成功した場合、

  • 接続 S は、現行状態になります。
  • S が特殊レジスター CURRENT SERVER に入れられます。
  • アプリケーション・サーバーについての情報は、 SQL 診断領域の接続情報項目 に入れられます。
  • アプリケーション・サーバー S に関する情報も、SQLCA の SQLERRP フィールドに入れられます。 アプリケーション・サーバーが IBM® リレーショナル・データベース製品の場合、その情報は pppvvrrm の形式です。ここで、
    • ppp は、製品を次のように識別します。
      • ARI (DB2® UDB (VSE および VM 版) の場合)
      • DSN (DB2 for z/OS® の場合)
      • QSQ (DB2 for i の場合)
      • 他のすべての DB2 プロダクトの場合は SQL
    • vv は、2 桁のバージョン ID です (例えば、'04' など)。
    • rr は、2 桁のリリース ID です (例えば、'01' など)。
    • m は、1 桁のモディフィケーション・レベルを示します (例えば、'0' など)。

    例えば、アプリケーション・サーバーがバージョン 4 の DB2 for z/OS の場合、SQLERRP の値は「DSN04010」になります。

  • 接続に関するその他の情報は、SQL 診断領域の DB2_CONNECTION_STATUS および DB2_CONNECTION_TYPE 接続情報項目から入手できます。

    DB2_CONNECTION_STATUS 接続情報項目は、 この作業単位に対する接続の状態を示しています。 次の値のいずれかが入れられます。

    • 1 - この作業単位の接続では、コミット可能な更新を行うことができる。
    • 2 - この作業単位の接続では、コミット可能な更新を行うことはできない。

    DB2_CONNECTION_TYPE 接続情報項目は、接続のタイプを示しています。 次の値のいずれかが入れられます。

    • 1 - ローカルのリレーショナル・データベースとの接続。
    • 2 - 会話が保護されない、遠隔のリモート・リレーショナル・データベースとの接続。
    • 3 - 会話が保護される、遠隔のリモート・リレーショナル・データベースとの接続。
    • 4 - アプリケーション・リクエスターのドライバー・プログラムとの接続。
  • 接続に関する追加の情報も SQLCA のフィールド SQLERRD(4) に入れられます。 SQLERRD(4) には、該当のアプリケーション・サーバーがコミット可能な更新 を実行するのを許可するかどうかを示す値が入ります。 以下は、この CONNECT に関して SQLCA のフィールド SQLERRD(4) に入れられる値とその意味を示しています。
    • 1 - コミット可能な更新を実行できます。接続は、無保護会話を使用する接続であるか、CONNECT (タイプ 1) ステートメントによってアプリケーション・リクエスターのドライバー・プログラムに対して確立された接続であるか、CONNECT (タイプ 1) ステートメントによって確立されたローカル接続であるかのいずれかです。
    • 2 - コミット可能な更新は行うことができません。会話は無保護です。
    • 3 - コミット可能な更新を行うことができるか否かは不明です。会話は保護会話です。
    • 4 - コミット可能な更新を行うことができるか否かは不明です。会話は無保護です。
    • 5 - コミット可能な更新を行うことができるかどうかは不明で、 その接続は、CONNECT (タイプ 2) ステートメントを使用して確立されたローカル接続、 または CONNECT (タイプ 2) ステートメントを使用して確立された アプリケーション・リクエスター・ドライバー・プログラムとの接続です。
  • 接続についての追加情報は SQLCA のフィールド SQLERRMC に入れられます。フィールド SQLERRMC の中の情報の説明については、付録 B、「SQL 連絡域」を参照してください。
  • それ以前の現行接続は、休止状態になります。

SET CONNECTION ステートメントが不成功であった場合、 該当の活動化グループの接続状態およびその接続の状態は変わりません。

CONNECT に対する SET CONNECTION (タイプ 1): CONNECT (タイプ 1) ステートメントの 使用は SET CONNECTION の使用を妨げることはありませんが、休止状態の接続は存在しないので、 そのステートメントは失敗するか何も行わないかのどちらかです。

接続がリストアされた後の状態: 同一の作業単位の中で接続が使用され、 休止状態になり、その後で現行状態に復元された場合は、その接続に関するロック、カーソル、 および準備済みステートメントの状況は、その活動化グループによる最後の使用を反映しています。

ローカル接続: 現行の独立補助記憶域プール (IASP) ネーム・スペースがローカル接続の リレーショナル・データベースに一致しない場合は、そのローカル接続に対する SET CONNECTION は失敗します。

TOROLAB1 で SQL ステートメントを実行し、次に TOROLAB2 で SQL ステートメントを実行し、 最後に TOROLAB1 でさらに SQL ステートメントを実行します。

   EXEC SQL CONNECT TO TOROLAB1;

   (TOROLAB1 のオブジェクトを参照するステートメントを実行する)

   EXEC SQL CONNECT TO TOROLAB2;  

   (TOROLAB2 のオブジェクトを参照するステートメントを実行する)

   EXEC SQL SET CONNECTION TOROLAB1;

   (TOROLAB1 のオブジェクトを参照するステートメントを実行する)

最初の CONNECT ステートメントは、TOROLAB1 との接続を確立し、2 番目の CONNECT ステートメントはその接続を休止状態にし、 SET CONNECTION ステートメントはその接続を現行状態に戻します。