16.20 - EXEC SQL文先頭子 - 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

目的

埋め込みSQLアプリケーション内のSQL文の始まりを示します。

呼び出し

実行不可プリプロセッサ宣言。

埋め込みSQLのみ。

構文



FOR
続くSQL文に対してパラメータ配列がサポートされることを指定します。繰り返しサポートは、複数INSERTのためにのみ提供されます。
([:]count_value)
実行される繰り返しの数を指定する、ユーザー定義のINTEGERホスト変数またはリテラルINTEGER定数。
embedded_sql_statement
クライアント アプリケーション プログラムにより実行される埋め込みSQL文。
sql_statement_terminator
クライアント言語用のSQL文終了子。
COBOLの場合、SQL文終了子はEND-EXECです。
CおよびPL/Iの場合、SQL文終了子はセミコロン(;)です。

ANSI準拠

EXEC SQLはANSI/ISO SQL:2011準拠であり、拡張機能が追加されています。

許可

なし。

EXEC SQLの使用上の一般ルール

以下のルールがEXEC SQLに適用されます。
  • アプリケーション コードを作成するために使用する言語に関係なく、クライアント アプリケーション プログラムに埋め込まれたそれぞれのSQL文の前にEXEC SQLが必要です。
  • EXEC SQL句は、1行でコーディングする必要があります。
  • 後続のSQL文は、EXEC SQL句の直後に続けること、新しい行で始めることもできます。
  • EXEC SQLを対話式SQL文と共に使用することはできません。

DML配列を指定したEXEC SQLの使用上のルール

以下のルールは、FOR句を使用して配列を指定したEXEC SQLを使用する際に適用されます。

繰り返しサポートは、単純な単ーのINSERT文に対してのみ提供されます。

以下のリストにある、その他のDML文はサポートされません。
  • DELETE
  • INSERT … SELECT
  • SELECT
  • UPDATE

ホスト変数またはリテラルINTEGER値を使用してcount_valueを指定することができます。

ホスト変数パラメータの配列はすべて一次元でなければなりません。

配列の配列はC言語以外ではサポートされず、システムは文字列の配列しかサポートしません。

count_valueを含むホスト変数は、使用する前にすべて設定しておかなければなりません。

SQLストリングに埋め込まれているリテラル定数は繰り返されません。

代わりに、挿入された行ごとに伝搬されます。

繰り返し文の中で使用されているホスト変数の集合は、独立した並列配列として扱われます。

Preprocessor2は、FOR count_valueの値を検査し、それが配列のサイズのいずれに対してもそれ以下であるかどうかを判別します。

カウント値がいずれかの列について配列のサイズを上回る場合、Preprocessor2はリクエストを中断してエラー メッセージを返します。

同じホスト変数を複数のフィールドに指定することができます。

いずれの繰り返しについても、すべての配列に対して1つのインデックスしかないため、同じ値が使用されます。

ホスト プログラムstructsの配列への参照はサポートされていません。サポートされるのは、変数の配列への参照のみです。

例: 単純な配列の例

これは、SQL DML配列を処理する単純な例です。 ここでは、count_valueがINTEGERリテラル値19として指定されています。

EXEC SQL FOR 19
   INSERT INTO table1
   VALUES (:var1, :var2, :var3);

例: 動的SQLの配列の例

この例では、Cで作成されたプログラム内で、動的SQLを用いたSQL DML配列処理を使用する方法を示しています。count_valuecNewEmployeesという名前のホスト変数を使用して提供されていることに注目してください。

char empname[50][20];
integer empnum[50];
float empsal[50];
intc NewEmployees = 50;
VARCHAR stmtstr[100];
char      *ins001=
 “INSERT INTO EMPLOYEE (EMPLOYEE_NUMBER, LAST_NAME, SALARY_AMOUNT)”
 “VALUES (?, ?, ?);”;
          strcpy(stmtstr.arr,ins001);
          stmstr.len = strlen(ins001);
   EXEC SQL
   PREPARE insStmt FROM :stmtstr;’
EXEC SQL FOR :cNewEmployees
EXECUTE insStmt USING :empnum, :empname, :empsal;

関連トピック

EXEC SQLの詳細については、END-EXEC文終了子を参照してください。