ASYNC文修飾子 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/xqq1557098602407.ditamap
dita:ditavalPath
ja-JP/xqq1557098602407.ditaval
dita:id
B035-1148
Product Category
Software
Teradata Vantage

目的

SQL文の非同期実行を指定します。

呼び出し

実行可能形式。

埋め込みSQLのみ。

構文

ASYNC (
  { async_statement_identifier | :async_statement_identifier_variable_name }
) async_SQL_statement
async_statement_identifier
非同期で実行されるSQL文に割り当てられる、大文字小文字を区別するアプリケーション提供の識別子。したがって、TEST文とWAIT文を使って、この文へのアクセスと、この文のステータスのテストおよび報告が可能になります。
それぞれの非同期文識別子は、長さを最大で30文字にすることができ、すべてのアクティブな接続で固有にする必要があります。
:async_statement_identifier_variable_name
複数のasync_statement_identifier文字列を提供するホスト変数の名前。
ホスト変数を使用すると、1つのASYNC文で複数の非同期セッションを同時にサポートできます。
この識別子は、最大で30文字の長さの固定長または可変長文字列にする必要があります。
最初のコロンは必須。
async_SQL_statement
実行可能SQL文。
ホスト変数を使用した動的SQLにより、間接的にasync_SQL_statementをASYNCに渡せます。

ANSI準拠

ASYNC句は、ANSI/ISO SQL:2011規格に対するTeradataの拡張機能です。

許可

なし。

ルール

1つの接続で実行できる非同期文は、1つだけになります。

1つの接続において、次の文を非同期処理するには、その前の非同期文の処理が終了していなければなりません。そうでなければ、実行時エラーが発生します。

それぞれのasync_statement_identifier(最大30バイトまで)は全てのアクティブな接続の間で固有でなければならず、大文字と小文字を区別します。

ASYNCは、DECLARE CURSOR文によって指定されたカーソル リクエストの中では無効になります。

ASYNCは、PREPAREまたはEXECUTE IMMEDIATE文で指定された動的リクエストの中では無効になります。

動的SQLを使用して、ホスト変数を介して非同期SQL文をASYNCに間接的に渡すことができます(例: 動的SQLを使用して非同期SQL文を渡すを参照)。

ASYNCは、以下の埋め込みSQL宣言文のいずれかと共に使用することはできません。
  • BEGIN DECLARE SECTION
  • DECLARE CURSOR
  • DECLARE STATEMENT
  • DECLARE TABLE
  • END DECLARE SECTION
  • INCLUDE
  • INCLUDE SQLCA
  • INCLUDE SQLDA
  • SET BUFFERSIZE
  • WHENEVER
ASYNCは、以下の実行可能埋め込みSQL文のいずれかと共に使用することはできません。
  • 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フィールドは、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を参照してください。