目的
Teradata Databaseから埋め込みSQLアプリケーション プログラムに明示的に接続します。
呼び出し
実行可能形式。
埋め込みSQLのみ。
構文
- logon_string
- 使用するログオン文字列を含んでいる変数を指定します。
- connection_name
- 接続の名前を指定します。
- :connection_name_variable
- 接続名を含んでいるホスト変数を指定します。
ANSI準拠
LOGONは、ANSI/ISO SQL:2011規格に対するTeradataの拡張機能です。
許可
なし。
LOGONとCONNECTとの相違
LOGONとCONNECTとの相違は、LOGON がTeradata SQL ログオン文字列のTDP IDやアカウントIDなどの、任意の指定可能な要素を指定できるのに対して、CONNECT はユーザーIDとパスワードの指定しかできません。
一般ルール
- LOGONはオプションです。
これを使用する場合、LOGONはアプリケーションによって実行される最初のSQL文でなければなりません。
省略した場合、Teradata Databaseへの接続は暗黙に確立されます。
- logon_string登録項は、使用するログオン文字列を含んでいるホスト変数を識別します。これはクライアント言語のSQL文字列のルールに従うものでなければなりません。このホスト変数の先行コロン文字の使用はオプションです。
- アプリケーション プログラムは、logon_stringに含まれるユーザーIDおよびパスワードがあれば、それらを使用してTeradata Databaseに接続します。それらのどちらかがなければ、暗黙接続が試行されます。
- logon_stringがTDP IDを含んでいる場合、それは最初に表示されなければならず、残りのログオン文字列とはスラッシュ(/)によって分離されていなければなりません。存在すれば、それが接続に使用するTDPを決定します。存在しない場合は、システム定義のデフォルトTDPが使用されます。
- LOGONは、動的文としては実行できません。
AS (connection_name |:connection_name_variable)句のルール
- connection_nameは固有でなければならず(最大30バイト)、大文字小文字を区別します。
- 現在のアクティブな接続が接続名を持っていない場合、次の接続には接続名を含めることができません。含めた場合、接続試行が拒否されたことを示す実行時エラーが返されます。現在のアクティブな接続は変更されないままです。
- :connection_name_variableは、30バイト以内の固定長または可変長の文字変数でなければなりません。
例1 -3
以下のすべての例では、参照されるホスト変数は以下のように定義されます。
EXEC SQL BEGIN DECLARE SECTION; char logstr[103]; VARCHAR CONNAMEV[30]; char CONNAMEF[31]; char STMTNAMF[31]; VARCHAR STMTNAMV[30]; EXEC SQL END DECLARE SECTION;
以下のRDTINフィールドは、これらの例において重要です。
| RDTINフィールド | 必須の指定 |
|---|---|
| RdtVersn | 10に設定。 |
| RdtExt | ’Y’に設定。拡張機能領域の存在を示す。 |
| RdtXTotL | RDTXCONM拡張機能領域のサイズを含む。 |
さらに、RdtX007 (RDTXCONM)構造は、接続名と通信するので、拡張機能領域のいずれかを組み込む必要があります。
例1: ホスト変数を使用したログオン
この例では、接続名と通信するホスト変数を使用してログオンします。
EXEC SQL LOGON :logstr AS SESSION1;
例1でC Preprocessor2によって生成される行
{
static struct {
SQLInt16 LogonStrLen;
char LogonStr[102];
} Sql_Stmt010;
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;
struct {
SQLInt16 RdtXLen;
SQLInt16 RdtXType;
char RdtLogMech[8];
char *RdtLogData;
} RdtX010;
} RDTIN010 =
{110,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C',
64,{' '},{8,5,255},{36,7,8,'S','E','S','S','I','O','N','1'},{16,
10,{' '},0}};
Sql_Stmt010.LogonStrLen = strlen(logstr);
memcpy(Sql_Stmt010.LogonStr,logstr,strlen(logstr));
RDTIN010.RdtSql = (char *)(&Sql_Stmt010);
RDTIN010.RdtCA = (char *)(&sqlca);
RDTIN010.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN010);
SQL_RDTRTCON = RDTIN010.RdtRtCon;
}
例2
例1と同様に、この例では、接続名と通信するホスト変数を使用してログオンします。
EXEC SQL LOGON :logstr AS :CONNAMEV;
例2でC Preprocessor2によって生成される行
{
static struct {
SQLInt16 LogonStrLen;
char LogonStr[102];
} Sql_Stmt011;
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;
struct {
SQLInt16 RdtXLen;
SQLInt16 RdtXType;
char RdtLogMech[8];
char *RdtLogData;
} RdtX010;
} RDTIN011 =
{110,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C',
64,{' '},{8,5,255},{36,7,},{16,10,{' '},0}};
Sql_Stmt011.LogonStrLen = strlen(logstr);
memcpy(Sql_Stmt011.LogonStr,logstr,strlen(logstr));
RDTIN011.RdtSql = (char *)(&Sql_Stmt011);
RDTIN011.RdtX007.RdtXConL = CONNAMEV.len;
memcpy(RDTIN011.RdtX007.RdtXConT,CONNAMEV.arr,CONNAMEV.len);
RDTIN011.RdtCA = (char *)(&sqlca);
RDTIN011.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN011);
SQL_RDTRTCON = RDTIN011.RdtRtCon;
}
例3
以下の例では、ホスト変数を使用して渡された固定長文字接続名を使用してログオンします。
EXEC SQL LOGON :logstr AS :CONNAMEF;
例3でC Preprocessor2によって生成される行
{
static struct {
SQLInt16 LogonStrLen;
char LogonStr[102];
} Sql_Stmt012;
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;
struct {
SQLInt16 RdtXLen;
SQLInt16 RdtXType;
char RdtLogMech[8];
char *RdtLogData;
} RdtX010;
} RDTIN012 =
{110,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C',
64,{' '},{8,5,255},{36,7,},{16,10,{' '},0}};
Sql_Stmt012.LogonStrLen = strlen(logstr);
memcpy(Sql_Stmt012.LogonStr,logstr,strlen(logstr));
RDTIN012.RdtSql = (char *)(&Sql_Stmt012);
RDTIN012.RdtX007.RdtXConL = strlen(CONNAMEF);
memcpy(RDTIN012.RdtX007.RdtXConT,CONNAMEF,strlen(CONNAMEF));
RDTIN012.RdtCA = (char *)(&sqlca);
RDTIN012.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN012);
SQL_RDTRTCON = RDTIN012.RdtRtCon;
}
関連トピック
以下に関する詳細な情報
- クライアント アプリケーション プログラムからTeradata Databaseに接続する代替方法については、CONNECTを参照してください。
- CONNECTまたはLOGON文を使用しないでPreprocessor2をTeradata Databaseに接続するための方法については、<Teradata® Preprocessor2埋め込みSQLプログラマ ガイド、B035-2446>を参照してください。