execute

EGL execute ステートメントでは、SQL ステートメント、特に SQL データ定義ステートメント (CREATE TABLE 型など) やデータ操作ステートメント (INSERT 型、UPDATE 型など) を 1 つ以上作成できます。


execute ステートメントの構文図
#sql{ sqlStatement }
明示的な SQL ステートメント。SQL ステートメントで結果セットの行をアップデートするか、削除する場合は、以下の文節を含む SQL UPDATE または DELETE ステートメントをコーディングします。
  WHERE CURRENT OF resultSetID
resultSetID
結果セットを使用可能にした EGL open 文に指定された resultSetID

#sql と左中括弧の間にスペースを入れないでください。

for SQL record name
SQL レコードの名前。

ステートメント・タイプ (delete、insert、または update) を指定する場合は、EGL では SQL レコードを使用して後述するように暗黙の SQL ステートメントを作成します。いずれの場合でも、SQL レコードを使用して操作の結果をテストすることができます。 of

preparedStatementID
指定された ID を持つ EGL prepare ステートメントを参照します。prepare ステートメントを参照しない 場合は、明示的な SQL ステートメントまたは SQL レコードとステートメント・タイプ (delete、insert、または update) の 組み合わせを指定する必要があります。
deleteinsertupdate
EGL が指定された型の暗黙の SQL ステートメントを提供することを示します。ステートメント・タイプを指定したものの、SQL レコード名を指定しない場合には、宣言時エラーが発生します。

prepare ステートメントを設定しない場合は、明示的な SQL ステートメントまたは prepare ステートメントへの参照を指定する必要があります。

暗黙の SQL ステートメントの概要については『SQL サポート』を参照してください。

ステートメントの例を次に示します (employeeRecord は SQL レコードであることを前提とします)。
  execute
    #sql{
      create table employee (
			 	   empnum decimal(6,0) not null,
 				   empname char(40) not null,
				   empphone char(10) not null)
    };

  execute update for employeeRecord;

  execute
    #sql{
      call aStoredProcedure( :argumentItem)
    };
以下の型の SQL ステートメントを発行するために execute ステートメントを使用できます。
以下の型の SQL ステートメントを発行するために execute ステートメントを使用することはできません。

暗黙の SQL DELETE

暗黙の SQL DELETE ステートメントを指定すると、 各 SQL 表キー列の値が SQL レコードの対応するキー項目の値と等しい限り、削除される表の行は、SQL レコード・プロパティー (defaultSelectCondition) に よって決まります。レコード・キーもデフォルトの選択条件も指定しない場合は、すべての表の行が削除されます。

特定のレコードのデフォルトの暗黙の SQL DELETE ステートメントは、 以下のステートメントのようになります。
  DELETE FROM tableName
  WHERE  keyColumn01 = :keyItem01

単一 EGL ステートメントを使用して、複数のデータベース表から行を削除することはできません。

暗黙の SQL INSERT

暗黙の SQL INSERT ステートメントの効果は、デフォルトでは以下のとおりです。
  • 表内でのデータの論理位置は、レコード内のキー値によって判別されます。キーを持たないレコードは、SQL 表の定義とデータベースの規則に従って処理されます。
  • レコード・パーツにおけるレコード項目と SQL 表の列の関連付けの結果、生成されたコードにより、関連する SQL 表の列に各レコード項目のデータが格納されます。
  • レコード項目が読み取り専用として宣言されている場合、生成された SQL INSERT ステートメントにはそのレコード項目が含まれず、 データベース管理システムでは、関連する SQL 表の列の値がデフォルト値 (その列が定義されたときに指定された値) に設定されます。
暗黙の SQL INSERT ステートメントの形式は、以下のとおりです。
  INSERT INTO tableName
    (column01, ... columnNN)
    values (:recordItem01, ... :recordItemNN)
エラー条件は、以下のとおりです。
  • INSERT 以外の型の SQL ステートメントを指定する
  • SQL INSERT ステートメントの全部ではなく一部の文節を指定する
  • 以下のいずれかの特性を持つ SQL INSERT ステートメントを指定する (または暗黙的な SQL ステートメントを受け入れる)
    • 複数の SQL テーブルに関連付けられている
    • 読み取り専用として宣言したホスト変数のみを組み込む
    • 存在しないか、関連するホスト変数との互換性がない列に関連付けられている

暗黙の SQL UPDATE

暗黙の SQL UPDATE ステートメントの効果は、デフォルトでは以下のとおりです。
  • 各 SQL 表キー列の値が SQL レコードの対応するキー項目の値と等しい限り、選択される表の行は、レコード固有の defaultSelectCondition と呼ばれる SQL レコード・プロパティーによって決まる。レコード・キーもデフォルトの選択条件も指定しない場合は、すべての表の行が更新されます。
  • SQL レコード宣言におけるレコード項目と SQL 表の列の関連付けの結果として、特定の SQL 表の列が、関連するレコード項目の内容を受け取ります。ただし、読み取り専用のレコード項目に関連付けられている SQL 表の列は更新されません。
特定のレコードの暗黙の SQL UPDATE ステートメントの形式は、 以下のステートメントのようになります。
  UPDATE tableName
  SET    column01 = :recordItem01, 
         column02 = :recordItem01, ... 
         columnNN = :recordItemNN
  WHERE  keyColumn01 = :keyItem01
以下のいずれかの場合によってエラーが発生します。
  • すべての項目が読み取り専用として識別されている
  • ステートメントが複数の SQL 表を更新しようとしている
  • データベースに書き込まれている項目が実行時に存在しないか、関連する構造体項目との互換性がない列に関連付けられている
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005.