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.