add

EGL add 文は、ファイル、メッセージ・キュー、またはデータベースの中にレコードを書き込みます。またはデータベースにレコード・セットを書き込みます。


add 文の構文図
record name
追加する入出力オブジェクトの名前。索引付きレコード、MQ レコード、相対レコード、シリアル・レコード、SQL レコードなどを指定します。
with #sql{ sqlStatement }
明示的な SQL INSERT ステートメント。#sql の後にスペースを入れないでください。
SQL dynamic-array name
SQL レコードの動的配列の名前。各エレメントは、エレメント固有のキー値によって指定されるデータベース内の位置に挿入されます。 操作は、最初のエラー時に、またはすべてのエレメントが挿入されたときに停止します。

以下に例を示します。

  if (userRequest == "A")
    try
      add record1;
    onException
      myErrorHandler(12);
    end
  end

add 文の振る舞いは、レコード・タイプによって異なります。SQL 処理の詳細については、『SQL レコード』を参照してください。

索引付きレコード

索引付きレコードを追加するときは、レコード内のキーによって、ファイル内でのレコードの論理位置が判別されます。 すでに使用されているファイル位置にレコードを追加すると、 ハード入出力エラー UNIQUE、または (重複が許可されている場合は) ソフト入出力エラー DUPLICATE になります。

MQ レコード

MQ レコードを追加するとき、レコードはキューの最後に入れられます。 この追加処理は、add が 以下に示す 1 つ以上の MQSeries® 呼び出しを呼び出すことによって行われます。

相対レコード

相対レコードを追加するときは、キー項目によって、ファイル内でのレコードの位置が指定されます。 ただし、すでに使用されているファイル位置にレコードを追加すると、 ハード入出力エラー UNIQUE になります。

レコード・キー項目は、そのレコードを使用するすべての関数で使用できなければなりません。以下のいずれかをレコード・キー項目とすることができます。
  • 同じレコード内の項目
  • プログラムに対してグローバルであるか、または add 文を実行している 関数に対してローカルであるレコード内の項目
  • プログラムに対してグローバルであるか、または add 文を実行している 関数に対してローカルであるデータ項目

シリアル・レコード

シリアル・レコードを追加するとき、レコードはファイルの末尾に入れられます。

生成されたプログラムでシリアル・レコードが追加されてから、 同じファイルに対して get next 文が発行されると、 get next 文が実行される前に、 ファイルが閉じられてから再び開かれます。 したがって、add 文の後に実行される get next 文では、ファイル内の最初のレコードが読み取られます。この振る舞いは、get next 文と add 文が別々のプログラムにあり、一方のプログラムで他方のプログラムが呼び出される場合にも起こります。

複数のプログラムで同時に同じファイルが開かないようにしておくことをお勧めします。

制限: CICS® for z/OS® では、同じスプール・ファイルに関する add 文と get next 文を組み合わせて 1 つのプログラムに組み込むことはできません。 この制限は、add 文と get next 文が別々のプログラムにあり、一方のプログラムが他方のプログラムを呼び出す場合にも適用されます。

SQL レコード

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

関連するタスク
構文図

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.(C) Copyright IBM Japan 2005.