SQL の add に関する考慮事項
SQL 照会言語のコンテキストでは、add 文は、レコードまたはレコードのセットをデータベースに追加します。
EGL は、レコード変数のキー・フィールドの値に基づき、情報を追加します。
EGL は、EGL add 文にある SQL レコード変数の値およびプロパティーに基づき、生成したコードに SQL INSERT 文を作成します。 この暗黙の SQL コードについて詳しくは、SQL データ・アクセスを参照してください。 あるいは、#sql ディレクティブを使用して、 独自の組み込み SQL INSERT 文を作成することもできます (sql ディレクティブを参照)。
add 文は、単一の SQL レコード変数を指定する場合、データベースに単一行を作成します。 また、SQL レコード変数の動的配列を指定することもできます。 その場合、add 文で配列の各メンバーに行が作成されます。
構文

- SQLRecordVariable
- データベースに追加する単一行のデータを含むメモリー領域を参照します。
- with #sql{ sqlStatement }
- 経験豊かな SQL プログラマーであれば、独自の SQL INSERT 文を組み込むことにより、 EGL が生成する SQL コードをオーバーライドできます (sql ディレクティブを参照)。 #sql と左中括弧の間にスペースを入れないでください。
- SQLDynamicArray
- SQL レコードの動的配列の名前。各要素は、要素固有のキー値によって指定されるデータベース内の位置に挿入されます。 操作は、最初のエラー時に、またはすべての要素が挿入されたときに停止します。
- Atomic
- Atomic と Atomic(no) をサポートします。
- Atomic は、すべての行を正しく挿入する必要があることを意味します。そうしない場合、複数行の挿入は失敗します。 これはデフォルトです。
- Atomic(no) は、行セット内の個々の行を正しく挿入するか、拒否できることを意味します。 GET DIAGNOSTICS を使用すると、正常に処理されなかった行を判別することができます。 SQL の get diagnostics に関する考慮事項を参照してください。
- 注:
- add Atomic は、ロギング・モードになっていない Informix® ではサポートされません。従来どおり、アトミック以外の方法を使用して追加されます。
- add Atomic(no) は、データベースによって動作が異なります。Oracle、DB2® for i5/OS™、SQL Server では、1 回失敗すると行を挿入しません。他のデータベースは、失敗した行を除くすべての行を挿入します。
制約事項: 複数行に対しては、add ステートメントは明示的な SQL ステートメントをサポートしません。
暗黙の SQL INSERT 文
INSERT INTO tableName
(column01, ... columnNN)
values (:recordItem01, ... :recordItemNN)
テーブル内でのデータの論理位置は、レコード内のキー値によって決まります。 データベース管理システムは、SQL テーブルの定義とデータベースの規則に従って、キーを持たないレコードを処理します。 レコード変数のベースとなるレコード・パーツは、レコード・フィールドをデータベース表の列と関連付けます。 EGL はこれらの関連付けを使用して、INSERT 文の値の代入を決定します。 ホスト変数 (SQL をホストする言語 (この場合は EGL) で定義した変数) の使用法は、先頭のコロン文字によって示されます。 詳しくは、ホスト変数を参照してください。
レコード・フィールドが読み取り専用として宣言されている場合、生成された SQL INSERT 文にはそのフィールドが含まれず、 データベース管理システムでは、関連する SQL テーブル列の値がデフォルト値 (その列が定義されたときに指定された値) に 設定されます。
例
次の例は、add ステートメントを示しています。
if (userRequest == "A")
try
add record1;
onException(sqlEx SQLException)
myErrorHandler(12);
end
end
try
add employees;
onException(sqlEx SQLException)
sysLib.rollback();
end
エラー条件
- #sql ディレクティブで INSERT 型以外の型の SQL 文を指定する。
- #sql ディレクティブで、SQL INSERT 文の全部ではなく一部の文節を指定する。
- 次のいずれかの特徴を持つ SQL INSERT 文を指定する (または EGL コードが暗黙の SQL 文を生成する)。
- 複数の SQL テーブルに関連付けられている。
- すべてのホスト変数が読み取り専用と宣言された。
- 存在しないか、関連するホスト変数との互換性がない列に関連付けられている。