目的
Teradata Databaseから埋め込みSQLアプリケーション プログラムを切断します。
呼び出し
実行可能形式。
埋め込みSQLのみ。
構文
- CURRENT
- 現在のセッションだけをログオフします。
- ALL
- 現在のユーザーに接続しているすべてのセッションをログオフします。
- connection_name
- 接続の名前を指定します。
- :connection_name_variable
- 接続名を含んでいるホスト変数を指定します。
ANSI準拠
LOGOFFは、ANSI/ISO SQL:2011規格に対するTeradataの拡張機能です。
許可
なし。
ルール
- LOGOFF文は任意選択です。省略した場合、Teradata Databaseからの切断は、アプリケーション プログラムの終了時に暗黙に実行されます。
- LOGOFFは、Teradata Databaseへの接続が、CONNECT文、LOGON文、または暗黙の接続のいずれによって確立されたかに関係なく使用できます。
- アプリケーションがCOMMITモードで実行している場合、LOGOFFによって未解決のトランザクションはすべてコミットされます。
アプリケーションがいずれかのトランザクション モードで実行している場合、LOGOFFしても未解決のトランザクションはコミットされません。
- LOGOFFは、動的文としては実行できません。
- LOGOFF ALLは、すべてのアクティブな接続を切断します。
- LOGOFF CURRENTは、現在のアクティブな接続を切断します。(切断オブジェクトが指定されない場合は、これがデフォルトです。)
- LOGOFF connection_nameは、指定した接続を切断します。各接続名は固有でなければならず(最大30バイト)、大文字小文字を区別します。
- LOGOFF:namevarは、:namevarに保管されている、指定した接続を切断します。:namevarは、30バイト以内の固定長または可変長の文字変数でなければなりません。
例1 - 4
以下のRDTINフィールドは、切断オブジェクトを指定する以下のLOGOFFに重要です。
| RDTINフィールド | 必須の指定 |
|---|---|
| RdtVersn | 10に設定。 |
| RdtAux1 | 次の値のいずれかに設定。
|
| RdtExt | ’Y’に設定。指名の接続を指定した場合のみ、拡張機能領域の存在を示す。 |
| RdtXTotL | RDTXCONM拡張機能領域のサイズを含む。指名の接続を指定した場合のみ。 |
さらに、RdtX007 (RDTXCONM)構造は、指名の接続を指定した場合にのみ接続名と通信するので、拡張機能領域のいずれかを組み込む必要があります。
例1
以下の例では、明示的な接続名を使用して切断します。
EXEC SQL LOGOFF 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;
} RDTIN006 =
{200,10,0,{' '},0,0,0,0,0,0,2,0,'N','B','N','Y','N','N',' ','C',
48,{' '},{8,5,255},{36,7,8,'S','E','S','S','I','O','N','1'}};
RDTIN006.RdtCA = (char *)(&sqlca);
RDTIN006.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN006);
SQL_RDTRTCON = RDTIN006.RdtRtCon;
}
例2
以下の例では、VARCHARホスト変数connamevによって指定される接続名を使用して切断します。
EXEC SQL LOGOFF :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;
} RDTIN007 =
{200,10,0,{' '},0,0,0,0,0,0,2,0,'N','B','N','Y','N','N',' ','C',
48,{' '},{8,5,255},{36,7,}};
RDTIN007.RdtX007.RdtXConL = CONNAMEV.len;
memcpy(RDTIN007.RdtX007.RdtXConT,CONNAMEV.arr,CONNAMEV.len);
RDTIN007.RdtCA = (char *)(&sqlca);
RDTIN007.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN007);
SQL_RDTRTCON = RDTIN007.RdtRtCon;
}
例3
以下の例では、固定長ホスト変数connamefによって指定される接続名を使用して切断します。
EXEC SQL LOGOFF :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;
} RDTIN008 =
{200,10,0,{' '},0,0,0,0,0,0,2,0,'N','B','N','Y','N','N',' ','C',
48,{' '},{8,5,255},{36,7,}};
RDTIN008.RdtX007.RdtXConL = strlen(CONNAMEF);
memcpy(RDTIN008.RdtX007.RdtXConT,CONNAMEF,strlen(CONNAMEF));
RDTIN008.RdtCA = (char *)(&sqlca);
RDTIN008.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN008);
SQL_RDTRTCON = RDTIN008.RdtRtCon;
}
例4
以下の例ではすべての接続を切断します。
EXEC SQL LOGOFF ALL;
例4で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;
} RDTIN009 =
{200,10,0,{' '},0,0,0,0,0,0,1,0,'N','B','N','Y','N','N',' ','C',
12,{' '},{8,5,255}};
RDTIN009.RdtCA = (char *)(&sqlca);
RDTIN009.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN009);
SQL_RDTRTCON = RDTIN009.RdtRtCon;
}
例: LOGOFF CURRENT
LOGOFF CURRENT文で生成されるコードは、オブジェクトの切断を指定しないLOGOFFと同じです。
RDTIN RdtAux1フィールドは0に設定する必要があります。