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 (動的)を参照してください。