LOGON | Teradata Vantage - LOGON - Teradata Vantage - Analytics Database

SQL Stored Procedures and Embedded SQL

Deployment
VantageCloud
VantageCore
Edition
VMware
Enterprise
IntelliFlex
Product
Analytics Database
Teradata Vantage
Release Number
17.20
Published
June 2022
ft:locale
en-US
ft:lastEdition
2023-10-30
dita:mapPath
frc1628111662093.ditamap
dita:ditavalPath
qkf1628213546010.ditaval
dita:id
rjx1472253414573
lifecycle
latest
Product Category
Teradata Vantage™

Explicitly connects an embedded SQL application program to Vantage.

ANSI Compliance

LOGON is a Teradata extension to the ANSI/ISO SQL:2011 standard.

Required Privileges

None.

Invocation

Executable.

Embedded SQL only.

Syntax

LOGON [:] logon_string
  [ AS { connection_name | :connection_name_variable } ]

Syntax Elements

logon_string
Variable containing the logon string to be used.
connection_name
Specified name of the connection.
connection_name_variable
The host variable that contains the connection name.
The preceding colon character is mandatory.

Usage Notes

  • Difference Between LOGON and CONNECT

    The difference between LOGON and CONNECT is that LOGON allows specification of any of the possible elements of a Teradata SQL logon string, such as TDP ID and account ID, while CONNECT allows only the user ID and password to be specified.

  • General Rules
    • LOGON is optional.

      If it is used, LOGON must be the first SQL statement executed by the application.

      If omitted, connection to Vantage is made implicitly.

    • logon_string entry identifies a host variable that contains the logon string to be used. It must obey the rules for SQL strings for the client language. Use of the colon character before the host variable is optional.
    • The application program is connected to Vantage using the user ID and password, if any, contained in logon_string. If either of these is missing, an implicit connection is attempted.
    • If logon_string contains a TDP ID, it must appear first and must be separated from the rest of the logon string by a slash (/). If present, it determines the TDP used for the connection; otherwise, the installation defined default TDP is used.
    • LOGON cannot be executed as a dynamic statement.
  • Rules for AS (connection_name |:connection_name_variable) Clause
    • The connection_name must be unique (up to 30 bytes) and is case-sensitive.
    • If the current active connection does not have a connection name, then the next connection must not include a connection name. A runtime error is returned indicating the connection attempt has been rejected. The current active connection remains unchanged.
    • The :connection_name_variable must be a fixed or varying length character variable no longer than 30 bytes.

Examples 1-3

For all of following examples, the referenced host variables are defined as follows:

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;

The following RDTIN fields are important for these examples:

This RDTIN field … Must …
RdtVersn be set to 10.
RdtExt be set to ‘Y’ to indicate the existence of an extension area.
RdtXTotL include the size of the RDTXCONM extension area.

Additionally, the RdtX007 (RDTXCONM) structure must be included as one of the extension areas because it communicates the connection name.

Example 1: Logging On Using a Host Variable

This example logs on using a host variable to communicate the connection name.

EXEC SQL LOGON :logstr AS SESSION1;

Lines Generated by C Preprocessor2 for Example 1

{
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;
  }

Example 2

Similar to Example 1, this example logs on using a host variable to communicate the connection name.

EXEC SQL LOGON :logstr AS :CONNAMEV;

Lines Generated by C Preprocessor2 for Example 2

{
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;
  }

Example 3

The following example logs on using a fixed length character connection name passed to using a host variable.

EXEC SQL LOGON :logstr AS :CONNAMEF;

Lines Generated by C Preprocessor2 for Example 3

{
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;
  }

Related Information

  • An alternative way to connect to Vantage from a client application program, see CONNECT
  • How Preprocessor2 can connect to Vantage without using CONNECT or LOGON statements, see Teradata® Preprocessor2 for Embedded SQL Programmer Guide, B035-2446.