SQL文の非同期実行を指定します。
ANSI準拠
ASYNC句は、ANSI/ISO SQL:2011規格に対するTeradataの拡張機能です。
必要な権限
なし。
呼び出し
実行可能形式。
埋め込みSQLのみ。
構文
ASYNC (
{ async_statement_identifier | :async_statement_identifier_variable_name }
) async_SQL_statement
構文要素
- async_statement_identifier
- 非同期で実行されるSQL文に割り当てられる、大文字小文字を区別するアプリケーション提供の識別子。したがって、TEST文とWAIT文を使って、この文へのアクセスと、この文のステータスのテストおよび報告が可能になります。
- :async_statement_identifier_variable_name
- 複数のasync_statement_identifier文字列を提供するホスト変数の名前。
- async_SQL_statement
- 実行可能SQL文。
使用上の注意
1つの接続で実行できる非同期文は、1つだけになります。
1つの接続において、次の文を非同期処理するには、その前の非同期文の処理が終了していなければなりません。そうでなければ、実行時エラーが発生します。
それぞれのasync_statement_identifier(最大30バイトまで)は全てのアクティブな接続の間で固有でなければならず、大文字と小文字を区別します。
ASYNCは、DECLARE CURSOR文によって指定されたカーソル リクエストの中では無効になります。
ASYNCは、PREPAREまたはEXECUTE IMMEDIATE文で指定された動的リクエストの中では無効になります。
動的SQLを使用して、ホスト変数を介して非同期SQL文をASYNCに間接的に渡すことができます(例: 動的SQLを使用して非同期SQL文を渡すを参照)。
- BEGIN DECLARE SECTION
- DECLARE CURSOR
- DECLARE STATEMENT
- DECLARE TABLE
- END DECLARE SECTION
- INCLUDE
- INCLUDE SQLCA
- INCLUDE SQLDA
- SET BUFFERSIZE
- WHENEVER
- ABORT
- BEGIN TRANSACTION
- COMMIT
- CONNECT
- DATABASE
- DESCRIBE
- END TRANSACTION
- FETCH
- GET CRASH
- LOGOFF
- LOGON
- POSITION
- REWIND
- SET BUFFERSIZE
- SET CHARSET
- SET CRASH
例: ASYNC文修飾子の使用
以下の例は、ASYNC文修飾子の使用方法を示しています。
| RDTINフィールド | 必須の指定 |
|---|---|
| RdtVersn | 10に設定。 |
| RdtExt | ’Y’に設定。拡張機能領域の存在を示す。 |
| RdtXTotL | RDTXASYN拡張機能領域のサイズを含む。 |
RdtX008 (RDTXASYN)構造は、接続名と通信するので、拡張機能領域のいずれかとして組み込む必要があります。
EXEC SQL ASYNC (INSEMP) INSERT EMPLOYEE VALUES (2010,1003,2216,8201,'JONES', 'FREDDY','20/06/14','19/05/25',200000);
例1でC Preprocessor2によって生成される行
{
static struct {
SQLInt32 StrLen;
char Str[93];
} Sql_Stmt016 =
{93,{' '}};
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;
} RDTIN016 =
{300,10,0,{' '},0,0,0,0,0,0,0,0,'N','B','N','Y','N','N',' ','C',
52,{' '},{8,5,255},{40,8,1,{6,'I','N','S','E','M','P',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' '}}};
memcpy(Sql_Stmt016.Str,"INSERT EMPLOYEE VALUES ( 2010,1003,2216,8201,'\
JONES', 'FREDDY','20/06/14','19/05/25',200000 )",93);
RDTIN016.RdtSql = (char *)(&Sql_Stmt016);
RDTIN016.RdtCA = (char *)(&sqlca);
RDTIN016.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN016);
SQL_RDTRTCON = RDTIN016.RdtRtCon;
}
例
これらの例は、クライアント プログラミング コードのコンテキストがないASYNC文修飾子のSQLテキストを表わしています。
例: カーソルを開くための非同期リクエスト
以下の例は、カーソルを開くための非同期リクエストを実行します。
ASYNC (request_1) OPEN cursor_1
例: 検索更新を実行するための非同期リクエスト
以下の例は、テーブルの検索更新を実行するための非同期リクエストを実行します。
ASYNC (request_1) UPDATE table_1 SET a = :a
例: マクロを実行するための非同期リクエスト
以下の例は、マクロを実行するための非同期リクエストを実行します。
ASYNC (request_1) EXEC macro_1
例: 動的SQLを使用して非同期SQL文を渡す
この例では、動的SQLを使用して、ホスト変数によって非同期SQL文をASYNCに渡します。
strcpy (SQL_STATEMENT.arr,"DELETE FROM TABLE1 WHERE FIELD1 = ?"); SQL_STATEMENT.len = strlen (SQL_STATEMENT.arr); EXEC SQL PREPARE s1 FROM :sql_statement; EXEC SQL ASYNC (stmt01) EXECUTE s1 USING :var1;
関連情報
非同期リクエストの完了ステータスのテストについての詳細は、TESTを参照してください。
非同期リクエストの完了の待機についての詳細は、WAITを参照してください。
動的SQLの詳細とEXECUTE (動的SQL形式)の説明については、動的SQL文の構文を参照してください。SQL文を動的に準備して実行する方法については、PREPARE (動的)を参照してください。