SQL の execute に関する考慮事項
SQL のコンテキストでは、EGL execute 文の一般的な用途は、動的要素を使用した準備済み SQL 文を実行することです。
この文を使用して、暗黙の delete、insert、または update 照会を作成したり、 使用可能なコマンドの限られたリストから組み込み SQL を作成したりすることもできます。
構文

- preparedStatementID
- EGL prepare 文を使用する際に、準備済み SQL コードに代入した識別子。 これは最も一般的な execute 文の使用法であり、通常は動的 SQL を含みます。 動的 SQL について詳しくは、SQL データ・アクセスを参照してください。
- using ... field
- 実行時に準備済み SQL 文から使用可能な EGL ホスト変数 (ホスト変数を参照) を識別します。 #sql ブロックの外側にある、このような文節ではホスト変数名の前にコロンを挿入しないでください。
- for SQLRecordVariable
- 暗黙の SQL 文 (delete、insert、または update) を作成する場合、EGL では、この SQL レコード変数を使用して、その文の内容を決定します。
これについては、このトピックの『暗黙の SQL コードの生成』で説明しています。
以下の例のように、SQL レコードを使用して操作の結果をテストすることができます。
onException (sqlEx SQLException) if (myCustomer is unique) myErrorHandler(8); end end - delete、insert、update
- これらのキーワードは、指定したタイプの暗黙の SQL 文を要求する場合に使用します。 暗黙の SQL 文の概要については、SQL データ・アクセスを参照してください。 これらのキーワードのいずれかを使用する場合は、SQL レコード変数を execute 文に含めてください。
- #sql{ sqlStatement }
- このタイプの組み込み SQL 文の使用法について詳しくは、sql ディレクティブを参照してください。SQL 文で結果セットの行をアップデートするか、削除する場合は、以下の文節を含む SQL UPDATE または DELETE 文をコーディングします。
WHERE CURRENT OF resultSetID- resultSetID
- 結果セットを使用可能にした EGL open 文または get 文に指定された resultSetID。
#sql と左中括弧の間にスペースを入れないでください。
暗黙の SQL コードの生成
execute 文を使用して暗黙の SQL を生成し、最初に EGL の open または get を実行せずに、特定のデータベース操作を実行することができます。 通常、EGL は、SQL データベース・アクセスの詳細 (結果セットの行の位置の操作など) を隠します。 execute 文で、SQL レコード・パーツの defaultSelectCondition プロパティーを設定することにより、変更したいデータベースの行を直接指定できます。
execute delete myCustomer;
保護がないため、これらの暗黙の SQL コマンドを使用する際は注意してください。
暗黙の SQL DELETE
暗黙の SQL DELETE 文は、defaultSelectCondition SQL レコード・プロパティーを使用して、削除するテーブル行を決定します。 これは、SQL テーブルの各キー列の値が、SQL レコード変数の対応するキー・フィールドの値と等しいことが前提です。 レコード・キーもデフォルトの選択条件も指定しなかった場合は、すべてのテーブルの行が削除されます。
DELETE FROM tableName
WHERE [ defaultSelectCondition AND ]
keyColumn01 = :keyField01 [ AND
...
keyColumnnn = :keyFieldnn ]
単一 EGL 文を使用して、複数のデータベース表から行を削除することはできません。
暗黙の SQL INSERT
- SQL レコード変数のキー値により、テーブル内でのデータの論理位置が判別されます。 キーを持たないレコードは、SQL テーブルの定義とデータベースの規則に従って処理されます。
- SQL レコード宣言におけるレコード・フィールドと SQL テーブルの列の関連付けの結果、 生成されたコードが、レコード変数の各フィールドのデータを、関連する SQL テーブル列に配置します。
- レコード・フィールドを読み取り専用として宣言した場合、生成された SQL INSERT 文にそのレコード・フィールドは組み込まれず、データベース管理システムは、関連する SQL テーブル列の値を、その列を定義する際に指定したデフォルト値に設定します。
INSERT INTO tableName
(column01, ... columnNN)
values (:recordField01, ... :recordFieldNN)
暗黙の SQL UPDATE
- 各 SQL テーブルのキー列の値が、SQL レコードの対応するキー・フィールドの値と等しい場合は、defaultSelectCondition SQL レコード・プロパティーにより、選択するテーブル行が決定されます。 レコード・キーもデフォルトの選択条件も指定しなかった場合は、すべてのテーブルの行が更新されます。
- SQL レコード宣言におけるレコード・フィールドと SQL テーブルの列の関連付けの結果、 特定の SQL テーブルの列が、レコード変数の関連するフィールドのコンテンツを受け取ります。 ただし、読み取り専用のレコード・フィールドに関連付けられている SQL テーブルの列は更新されません。
UPDATE tableName
SET column01 = :recordField01,
column02 = :recordField01, ...
columnNN = :recordFieldNN
WHERE keyColumn01 = :keyField01 [ AND
...
keyColumnnn = :keyFieldnn ]
組み込み SQL
execute #sql{
DELETE FROM Customer
WHERE last_order_date < :targetDate
};
EGL 変数 targetDate が、SQL コードのホスト変数 (前にコロンが付く) になります。詳しくは、ホスト変数を参照してください。
同様の構文を使用して、SQL の INSERT 文または UPDATE 文を組み込むこともできます。
EGL の execute 文を使用して、結果セットを戻す SQL 文を組み込むことはできません。 これは、ユーザーがカーソルを直接制御することができないためです。カーソルの定義と管理は、すべて EGL が内部的に処理します。
- ALTER
- CALL
- CREATE ALIAS
- CREATE INDEX
- CREATE SYNONYM
- CREATE TABLE
- CREATE VIEW
- DECLARE GLOBAL TEMPORARY TABLE
- DELETE
- DROP INDEX
- DROP SYNONYM
- DROP TABLE
- DROP VIEW
- GRANT
- INSERT
- LOCK
- RENAME
- REVOKE
- SAVEPOINT
- SET
- SIGNAL
- UPDATE
- VALUES
- CLOSE
- COMMIT
- CONNECT
- CREATE FUNCTION
- CREATE PROCEDURE
- DECLARE CURSOR
- DESCRIBE
- DISCONNECT
- EXECUTE
- EXECUTE IMMEDIATE
- FETCH
- OPEN
- PREPARE
- ROLLBACK WORK
- SELECT
- INCLUDE SQLCA
- INCLUDE SQLDA
- WHENEVER
例
execute #sql{
create table Customer (
customer_number int not null,
customer_name char(40) not null,
customer_balance decimal(9,2) not null)
};
execute update for myCustomer;
execute #sql{
call aStoredProcedure( :parameterVar)
};
execute myPreparedStatement;
エラー条件
暗黙の delete、insert、または update 照会を呼び出して、SQL レコード変数を指定しないと、宣言時間エラーが発生します。
唯一の使用可能なホスト変数が、読み取り専用である場合、暗黙の insert または update 照会にエラーが発生します。