16.20 - WAIT - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

目的

呼び出されているプログラムの実行を一時停止し、1つまたは複数の非同期SQL文が完了するのを待ちます。

呼び出し

実行可能形式。

埋め込みSQLのみ。

構文



async_statement_identifier
ASYNC修飾子によって割り当てられた、非同期で実行されるSQL文の、大文字小文字を区別するアプリケーション提供の識別子。
それぞれの非同期文識別子は、長さを最大で30文字にすることができ、すべてのアクティブな接続で固有にする必要があります。
async_statement_identifier_variable_name
WAIT文に渡される非同期文識別子を備えたホスト変数の名前。
この識別子は、最大で30文字の長さの固定長または可変長文字列にする必要があります。
この値を指定すると、アプリケーションがホスト変数によってasync_statement_identifierの複数の値をWAITに提供できます。
前に付けるコロンは必須ではありませんが、適正なプログラミングの慣行に従うものです。
ALL
現在の非同期実行SQL文すべての実行を一時停止します。
async_statement_variable
リクエストが完了した非同期文の識別子が入るホスト変数の名前。
session_variable
完了したasync_statement_variableのセッション識別子が書き込まれるホスト変数の名前。

ANSI準拠

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

許可

なし。

ルール

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

未処理の非同期SQL文が存在しなければ、例外条件“no outstanding asynchronous SQL statement”が発生します。
  • SQLCODEは -650に設定される。
  • SQLSTATEは’04000’に設定される。
指定するオプション WAIT文が結果を返す時点
ALL すべての非同期文の終了時。
ANY COMPLETION INTO 未解決の非同期文の終了時。

非同期文の識別子はINTO句のホスト変数async_statement_variableに返され、セッション識別子はホスト変数session_variableに返されます。

ホスト変数async_statement_variableおよびsession_variableは固定長または可変長の文字変数で、最大長が30バイトでなければなりません。

返される非同期文識別子が出力ホスト変数に定義された長さよりも長い場合、例外条件“output host variable is too small to hold returned data”が発生します。
  • SQLCODEは -304に設定される。
  • SQLSTATEは’22003’に設定される。
以下のリクエスト タイプでは、WAITを実行できません。
  • DECLARE CURSOR文によって指定されるカーソル リクエスト。
  • PREPAREまたはEXECUTE IMMEDIATE文で指定された動的リクエスト。

例1 - 4

以下のRDTINフィールドは、以下のWAIT文の例において重要です。

RDTINフィールド 必須の指定
RdtCType 470に設定。
RdtAux1 次の値のいずれかに設定。
  • すべての非同期文の完了を待機する。
  • いずれかの非同期文の完了を待機する。
  • リストされた指名の非同期文の完了を待機する。
RdtVersn 10に設定。
RdtExt ’Y’に設定。非同期文を指定した場合にのみ、拡張機能領域の存在を示す。
RdtXTotL RDTXASYN拡張機能領域のサイズを含む。非同期文を指定した場合のみ。

さらに、非同期文を指定した場合、RdtX008 (RDTXASYN)構造は接続名と通信するので、拡張機能領域のいずれかを組み込む必要があります。

例: 固定長の文字値をホスト変数に渡す

この例では、固定長の文字値を、ANY COMPLETION INTO句内の文およびセッション変数に対して宣言されたホスト変数に渡します。

EXEC SQL WAIT ANY COMPLETION INTO :STMTNAMF, :CONNAMEF;

例1でC Preprocessor2によって生成される行

{
static struct {
       char      sqldaid[8];
       SQLInt32  sqldabc;
       short     sqln;
       short     sqld;
       struct {
              short     sqltype;
              short     sqllen;
              char     *sqldata;
              char     *sqlind;
              struct {
                     short     length;
                     char      data[30];
                     } sqlname;
              } sqlvar[2];
       } Sql_DA019_StructO =
       {'S','Q','L','D','A',' ',' ',' ',104,2,2,{{460,31,0,0,{0,{' '}}}
,{460,31,0,0,{0,{' '}}}}};
      Sql_DA019_StructO.sqlvar[0].sqldata = STMTNAMF;
      Sql_DA019_StructO.sqlvar[1].sqldata = CONNAMEF;
      {
      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;
             } RDTIN019 =
             {470,10,0,{' '},0,0,0,0,0,0,2,0,'N','B','N','Y','N','N',
             ' ','C',12,{' '},{8,5,255}};
      RDTIN019.RdtDAOut = (char *)(&Sql_DA019_StructO);
      RDTIN019.RdtCA = (char *)(&sqlca);
      RDTIN019.RdtRtCon = SQL_RDTRTCON;
      TDARDI(&RDTIN019);
      SQL_RDTRTCON = RDTIN019.RdtRtCon;
      }
  }

例2

この例では、可変長の文字値を、ANY COMPLETION INTO句内の文およびセッション変数に対して宣言されたホスト変数に渡します。

EXEC SQL WAIT ANY COMPLETION INTO :STMTNAMV, :CONNAMEV;

例2でC Preprocessor2によって生成される行

{
static struct {
       char      sqldaid[8];
       SQLInt32  sqldabc;
       short     sqln;
       short     sqld;
       struct {
              short     sqltype;
              short     sqllen;
              char     *sqldata;
              char     *sqlind;
              struct {
                     short     length;
                     char      data[30];
                     } sqlname;
              } sqlvar[2];
       } Sql_DA020_StructO =
       {'S','Q','L','D','A',' ',' ',' ',104,2,2,{{448,30,0,0,{0,{' '}}}
,{448,30,0,0,{0,{' '}}}}};
      Sql_DA020_StructO.sqlvar[0].sqldata = (char *)(&STMTNAMV);
      Sql_DA020_StructO.sqlvar[1].sqldata = (char *)(&CONNAMEV);
      {
      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;
             } RDTIN020 =
             {470,10,0,{' '},0,0,0,0,0,0,2,0,'N','B','N','Y','N','N',
             ' ','C',12,{' '},{8,5,255}};
      RDTIN020.RdtDAOut = (char *)(&Sql_DA020_StructO);
      RDTIN020.RdtCA = (char *)(&sqlca);
      RDTIN020.RdtRtCon = SQL_RDTRTCON;
      TDARDI(&RDTIN020);
      SQL_RDTRTCON = RDTIN020.RdtRtCon;
      }
  }

例3

この例では、ALL COMPLETIONオプションを使用して、すべてのアクティブな非同期文が完了するまで待機します。

EXEC SQL WAIT ALL COMPLETION;

例3でC Preprocessor2によって生成される行

{
 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;
        } RDTIN021 =
        {470,10,0,{' '},0,0,0,0,0,0,1,0,'N','B','N','Y','N','N',' ','C',
        12,{' '},{8,5,255}};
 RDTIN021.RdtCA = (char *)(&sqlca);
 RDTIN021.RdtRtCon = SQL_RDTRTCON;
 TDARDI(&RDTIN021);
 SQL_RDTRTCON = RDTIN021.RdtRtCon;
   }

例4

この例では、複数の明示的な非同期文を使用します。

EXEC SQL WAIT ASYNSTMT1, ASYNSTMT2 COMPLETION;

例4でC Preprocessor2によって生成される行

{
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[2];
              } RdtX008;
       } RDTIN022 =
       {470,10,0,{' '},0,0,0,0,0,0,3,0,'N','B','N','Y','N','N',' ','C',
       84,{' '},{8,5,255},{72,8,2,{{9,'A','S','Y','N','S','T','M','T',
       '1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
       ' ',' ',' ',' ',' ',' '},{9,'A','S','Y','N','S','T','M','T','2',
       ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
       ' ',' ',' ',' ',' '}}}};
RDTIN022.RdtCA = (char *)(&sqlca);
RDTIN022.RdtRtCon = SQL_RDTRTCON;
TDARDI(&RDTIN022);
SQL_RDTRTCON = RDTIN022.RdtRtCon;
  }

例1 -4

以下の例は、クライアント プログラミング コードのコンテキストがないWAIT文のSQLテキストを表わしています。

例: 基本的なWAIT文

以下の例は、基本的なWAIT文を示しています。req_1というSQLリクエストが完了すると、WAITはプログラムに制御を戻します。

WAIT req_1 COMPLETION

例: より複雑なWAIT文

以下の例はより複雑なWAIT文で、非同期文の識別子を2つ指定します。req_1およびreq_2の両方が完了した時点で、WAITはプログラムに制御を戻します。

WAIT req_1, req_2 COMPLETION

例: 未処理の非同期SQL文

以下の例では、全ての未処理の非同期SQL文の完了を待機して、全てが完了した時点でプログラムに制御を戻します。

WAIT ALL COMPLETION

例: 未処理の非同期SQL文の完了

以下の例では、いずれかの未処理の非同期SQLリクエストが完了するの待機し、いずれかが完了するとプログラムに制御を戻します。このとき、完了した非同期文の識別子を:requid_varに、リクエストが完了したセッションの識別子を:sessid_varにそれぞれ返します。

WAIT COMPLETION INTO :reqid_var, :sessid_var

関連トピック

  • 非同期リクエストの送信方法については、ASYNC文修飾子を参照してください。
  • 非同期リクエストの完了を待たずにそのステータスをテストする方法については、TESTを参照してください。