Tests the completion status of the asynchronous SQL statement identified by async_statement_identifier.
When used with the WAIT statement, returns the completion status of the asynchronous SQL statement identified by async_statement_identifier or by host_variable_name, but does not wait if the request has not completed.
ANSI Compliance
TEST is a Teradata extension to the ANSI/ISO SQL:2011 standard.
Required Privileges
None.
Invocation
Executable.
Embedded SQL only.
Syntax
TEST {
async_statement_identifier |
:async_statement_identifier_variable_name
} COMPLETION
Syntax Elements
- async_statement_identifier
- A case-sensitive, application-supplied identifier for an asynchronously executed SQL statement assigned by the ASYNC modifier.
- :async_statement_identifier_variable_name
- the name of a host variable that contains an asynchronous statement identifier.
Usage Notes
Each async_statement_identifier assignment is case-sensitive and must be unique across all active connections.
The maximum length of each async_statement_identifier is 30 bytes.
The value for :async_statement_identifier_variable_name must be a fixed or varying length character variable no longer than 30 bytes.
- SQLCODE is set to -650.
- SQLSTATE is set to ‘04000’.
- SQLCODE is set to -651.
- SQLSTATE is set to ‘03000’.
- The runtime finishes processing the request and returns the completion status via the SQLCODE or the SQLSTATE.
- The SQL statement named by async_statement_identifier can no longer be referenced.
- Cursor requests specified by the DECLARE CURSOR statement.
- Dynamic requests specified by the PREPARE or EXECUTE IMMEDIATE statements.
Examples 1 - 3
The following RDTIN fields are important for these examples:
| This RDTIN field … | Must … |
|---|---|
| RdtCType | be set to 460. |
| RdtVersn | be set to 10. |
| RdtExt | be set to ‘Y’ to indicate the existence of an extension area. |
| RdtXTotL | include the size of the RDTXASYN extension area. |
Additionally, the RdtX008 (RDTXASYN) structure must be included as one of the extension areas because it communicates the connection name.
Example: Explicitly Specifying an Async Statement Identifier
This example uses an explicitly specified async statement identifier.
EXEC SQL TEST ASYNSTMT1 COMPLETION;
Lines Generated by C Preprocessor2 for Example 1
{
static struct {
SQLInt32 RdtCType;
SQLInt16 RdtVersn;
SQLInt16 RdtRfu1;
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;
SQLInt32 RdtXAsyC;
struct {
SQLInt16 RdtXAsyL;
char RdtXAsyT[30];
} RdtXAsyS;
} RdtX008;
} RDTIN011 =
{460,9,0,{' '},0,0,0,0,0,0,0,0,'N','C','N','Y','N','N',' ','C'
,52,{' '},{8,5,255},{40,8,1,{9,'A','S','Y','N','S','T','M','T'
,'1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' '}}};
...
RDTIN011.RdtX008.RdtXAsyL = strlen(STMTNAMF);
memcpy(RDTIN011.RdtX008.RdtXAsyT,STMTNAMF,strlen(STMTNAMF));
...
}
Example 2
The following example uses a host variable to obtain the async statement identifier:
EXEC SQL TEST :STMTNAMV COMPLETION;
Lines Generated by C Preprocessor2 for Example 2
{
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;
SQLInt32 RdtXAsyC;
struct {
SQLInt16 RdtXAsyL;
char RdtXAsyT[30];
} RdtXAsyS;
} RdtX008;
} RDTIN017 =
{460,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C',
52,{' '},{8,5,255},{40,8,1,}};
RDTIN017.RdtX008.RdtXAsyS.RdtXAsyL = STMTNAMV.len;
memcpy(RDTIN017.RdtX008.RdtXAsyS.RdtXAsyT,STMTNAMV.arr,STMTNAMV.len);
RDTIN017.RdtCA = (char *)(&sqlca);
RDTIN017.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN017);
SQL_RDTRTCON = RDTIN017.RdtRtCon;
}
Example 3
The following example uses a host variable to pass the async statement identifier as a fixed length character string
EXEC SQL TEST :STMTNAMF COMPLETION;
Lines Generated by C Preprocessor2 for Example 3
{
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;
SQLInt32 RdtXAsyC;
struct {
SQLInt16 RdtXAsyL;
char RdtXAsyT[30];
} RdtXAsyS;
} RdtX008;
} RDTIN018 =
{460,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C',
52,{' '},{8,5,255},{40,8,1,}};
RDTIN018.RdtX008.RdtXAsyS.RdtXAsyL = strlen(STMTNAMF);
memcpy(RDTIN018.RdtX008.RdtXAsyS.RdtXAsyT,STMTNAMF,strlen(STMTNAMF));
RDTIN018.RdtCA = (char *)(&sqlca);
RDTIN018.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN018);
SQL_RDTRTCON = RDTIN018.RdtRtCon;
}
Examples 1-3
The following examples present TEST statement SQL text without any client programming code context.
Example: Testing the Statement Identified by the Name req_1
This example tests the statement identified by the name req_1 for completion and returns the appropriate exception or completion code to SQLCODE or SQLSTATE.
The name req_1 is defined by the ASYNC clause using the async_statement_modifier variable.
TEST req_1 COMPLETION
Example: Testing the Statement Identified by the Host Variable :reqid_var
This example tests the statement identified by the host variable :reqid_var for completion and returns the appropriate exception or completion code to SQLCODE or SQLSTATE.
The name contained within :reqid_var is defined by the ASYNC clause using the async_statement_modifier variable.
TEST :reqid_var COMPLETION
Example: Using TEST with WAIT
This example uses TEST with WAIT. The program asynchronously spawns two update requests, req_1 and req_2, respectively, then waits until both req_1 and req_2 have completed before proceeding.
TEST statements monitor SQLCODE to determine when both req_1 and req_2 have returned successful completion codes (SQLCODE = 0) before continuing with the rest of the main program.
If either request has not completed (SQLCODE = -651), then the wait continues.
When both statements have completed, then the main program continues processing.
The non-SQL statements are pseudocode to indicate crudely a general idea of how the WAIT and TEST SQL statements might fit into a host main program.
... EXEC-SQL ASYNC req_1 UPDATE table_a SET a = :a; EXEC-SQL ASYNC req_2 UPDATE table_b SET b = :b; ... 100 EXEC-SQL WAIT req_1, req_2 COMPLETION; ... EXEC-SQL TEST req_1 COMPLETION; IF SQLCODE = -651 THEN GOTO 100 IF SQLCODE = 0 THEN CONTINUE EXEC-SQL TEST req_2 COMPLETION; IF SQLCODE = -651 THEN GOTO 100 IF SQLCODE = 0 THEN CONTINUE ...
Related Information
- See ASYNC Statement Modifier for information about how to submit an asynchronous request.
- See WAIT for information about how to wait on and test the status of an asynchronous request.