既存のセッション接続を新規の接続に変更します。
ANSI準拠
SET CONNECTIONは、ANSI/ISO SQL:2011に準拠しています。
必要な権限
なし。
呼び出し
実行可能形式。
埋め込みSQLのみ。
構文
SET CONNECTION { connection_name | :connection_name_variable }
構文要素
- connection_name
- 現在の接続が変更される接続変数の名前を指定します。
- :connection_name_variable
- 接続名を含んでいるホスト変数を指定します。
使用上の注意
- SET CONNECTIONは、以下の場合には無効です。
- 現在のセッションに接続名がないため、単一セッション モードである。実行時エラーが起きて、現在の接続が有効のままである。
- DECLARE CURSOR文によって指定されたカーソルリクエスト内である。
- PREPAREまたはEXECUTE IMMEDIATE文によって指定された動的リクエスト内である。
試行したSET CONNECTIONが失敗した場合、現在の接続にconnection_nameがない限り、現在のセッションはありません。
現在の接続が切断された場合、SET CONNECTION文を実行して、バックグラウンド接続を現在の接続にしなければなりません。
各接続名は固有でなければならず(最大30バイト)、大文字小文字を区別します。
:namevarは、30バイト以内の固定長または可変長の文字変数でなければなりません。
- SET CONNECTIONおよびマルチセッション プログラミング
SET CONNECTIONは、マルチセッション プログラミングで使用するように設計されており、アプリケーションが複数の並行セッション間で接続を切り替えることができます。
例1 - 3
以下のRDTINフィールドは、これらの例において重要です。
RDTINフィールド | 必須の指定 |
---|---|
RdtCType | 150に設定。 |
RdtVersn | 10に設定。 |
RdtExt | ’Y’に設定。拡張機能領域の存在を示す。 |
RdtXTotL | RDTXCONM拡張機能領域のサイズを含む。 |
さらに、RdtX007 (RDTXCONM)構造は、接続名と通信するので、拡張機能領域のいずれかを組み込む必要があります。
例: セッション接続の確立
以下の例では、明示的に指定された接続名を使用してセッション接続を確立します。
EXEC SQL SET CONNECTION SESSION1;
例1でC Preprocessor2によって生成される行
{ static struct { SQLInt32 RdtCType; SQLInt16 RdtVersn; SQLInt16 RdtDec; char RdtUserid[8]; SQLInt32 RdtEntty; char *RdtCA; char *RdtDAIn; char *RdtDAOut; char *RdtSql; char *RdtRtCon; SQLInt32 RdtAux1; SQLInt32 RdtAux2; char RdtLCS; char RdtComit; char RdtRelse; char RdtExt; char RdtSepBT; char RdtUCStm; char RdtCmpat; char RdtComp; SQLInt16 RdtXTotL; char RdtXFill[2]; struct { SQLInt16 RdtXLen; SQLInt16 RdtXType; SQLInt32 RdtXCode; } RdtX005; struct { SQLInt16 RdtXLen; SQLInt16 RdtXType; SQLInt16 RdtXConL; char RdtXConT[30]; } RdtX007; } RDTIN013 = {150,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C', 48,{' '},{8,5,255},{36,7,8,'S','E','S','S','I','O','N','1'}}; RDTIN013.RdtCA = (char *)(&sqlca); RDTIN013.RdtRtCon = SQL_RDTRTCON; TDARDI(&RDTIN013); SQL_RDTRTCON = RDTIN013.RdtRtCon; }
例2
以下の例では、ホスト変数connamevによってSET CONNECTIONに渡されるVARCHAR接続名を使用してセッション接続を確立します。
EXEC SQL SET CONNECTION :CONNAMEV;
例2でC Preprocessor2によって生成される行
{ static struct { SQLInt32 RdtCType; SQLInt16 RdtVersn; SQLInt16 RdtDec; char RdtUserid[8]; SQLInt32 RdtEntty; char *RdtCA; char *RdtDAIn; char *RdtDAOut; char *RdtSql; char *RdtRtCon; SQLInt32 RdtAux1; SQLInt32 RdtAux2; char RdtLCS; char RdtComit; char RdtRelse; char RdtExt; char RdtSepBT; char RdtUCStm; char RdtCmpat; char RdtComp; SQLInt16 RdtXTotL; char RdtXFill[2]; struct { SQLInt16 RdtXLen; SQLInt16 RdtXType; SQLInt32 RdtXCode; } RdtX005; struct { SQLInt16 RdtXLen; SQLInt16 RdtXType; SQLInt16 RdtXConL; char RdtXConT[30]; } RdtX007; } RDTIN014 = {150,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C', 48,{' '},{8,5,255},{36,7,}}; RDTIN014.RdtX007.RdtXConL = CONNAMEV.len; memcpy(RDTIN014.RdtX007.RdtXConT,CONNAMEV.arr,CONNAMEV.len); RDTIN014.RdtCA = (char *)(&sqlca); RDTIN014.RdtRtCon = SQL_RDTRTCON; TDARDI(&RDTIN014); SQL_RDTRTCON = RDTIN014.RdtRtCon; }
例3
以下の例では、ホスト変数connamefによってSET CONNECTIONに渡されるCHAR接続名を使用してセッション接続を確立します。
EXEC SQL SET CONNECTION :CONNAMEF;
例3でC Preprocessor2によって生成される行
{ static struct { SQLInt32 RdtCType; SQLInt16 RdtVersn; SQLInt16 RdtDec; char RdtUserid[8]; SQLInt32 RdtEntty; char *RdtCA; char *RdtDAIn; char *RdtDAOut; char *RdtSql; char *RdtRtCon; SQLInt32 RdtAux1; SQLInt32 RdtAux2; char RdtLCS; char RdtComit; char RdtRelse; char RdtExt; char RdtSepBT; char RdtUCStm; char RdtCmpat; char RdtComp; SQLInt16 RdtXTotL; char RdtXFill[2]; struct { SQLInt16 RdtXLen; SQLInt16 RdtXType; SQLInt32 RdtXCode; } RdtX005; struct { SQLInt16 RdtXLen; SQLInt16 RdtXType; SQLInt16 RdtXConL; char RdtXConT[30]; } RdtX007; } RDTIN015 = {150,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C', 48,{' '},{8,5,255},{36,7,}}; RDTIN015.RdtX007.RdtXConL = strlen(CONNAMEF); memcpy(RDTIN015.RdtX007.RdtXConT,CONNAMEF,strlen(CONNAMEF)); RDTIN015.RdtCA = (char *)(&sqlca); RDTIN015.RdtRtCon = SQL_RDTRTCON; TDARDI(&RDTIN015); SQL_RDTRTCON = RDTIN015.RdtRtCon; }