埋め込みSQLアプリケーション内のSQL文の始まりを示します。
ANSI準拠
EXEC SQLはANSI/ISO SQL:2011準拠であり、拡張機能が追加されています。
必要な権限
なし。
呼び出し
実行不可プリプロセッサ宣言。
埋め込みSQLのみ。
構文
EXEC SQL [ FOR [:] count_value ] embedded_sql_statement sql_statement_terminator
構文要素
- FOR
- 続くSQL文に対してパラメータ配列がサポートされることを指定します。繰り返しサポートは、複数INSERTのためにのみ提供されます。
- count_value
- 実行される繰り返しの数を指定する、ユーザー定義のINTEGERホスト変数またはリテラルINTEGER定数。
- embedded_sql_statement
- クライアント アプリケーション プログラムにより実行される埋め込みSQL文。
- sql_statement_terminator
- クライアント言語用のSQL文終了子。
使用上の注意
- 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_valueがcNewEmployeesという名前のホスト変数を使用して提供されていることに注目してください。
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;