このトピックでは、OpenSQLによりDBデータを更新する方法を取り上げて説明します。
テーブルに行を挿入するには、1件ずつ挿入と一括挿入の二つの方法があります。
テーブルに1行データを挿入するには、下記のような方法があります。
構文:
INSERT INTO テーブル名 VALUES wa. 又は INSERT テーブル名 FROM wa.
この場合、構造体wa の内容がデータベーステーブルに書き込まれます。
SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は挿入されず、システム項目「SY-SUBRC 」 は 4 に設定されます。
構文:
INSERT dbtab.
この場合、テーブル作業領域 dbtab の内容は同じ名称のデータベーステーブルに挿入されます。このテーブル作業領域は TABLES 命令を使って宣言しなければなりません。なお、データベーステーブルの名称を動的に指定することはできません。
SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は挿入されず、システム項目「SY-SUBRC 」 は 4 に設定されます。
構文:
INSERT テーブル名 FROM TABLE itab[ACCEPTING DUPLICATE KEYS]
この場合、1 つの操作で、内部テーブルitabのすべての行がデータベーステーブルへ書き込まれます。
SY-SUBRC:
内部テーブルからの行をすべて挿入できる場合、システム項目「SY-SUBRC 」は 0 に設定されます。データベースにすでに同じ一次キーを持つ行が含まれているために 1 つまたは複数の行が挿入できない場合、実行時エラーが発生します。オプション ACCEPTING DUPLICATE KEYS を使用して実行時エラーの発生を防ぐことができます。この場合、実行時エラーの発生原因となりうる行が拒否され、システム項目「SY-SUBRC 」は 4 に設定されます。
システム項目「SY-DBCNT」 には、システム項目「SY-SUBRC 」の値にかかわらず、常にデータベーステーブルに挿入された行数が含まれます。
データベーステーブルに複数行を挿入する場合は、1 行ずつ挿入するよりも内部テーブルを利用した方が効率的です。
テーブルの既存行のデータを変更するには、下記のような方法があります。
構文:
UPDATE テーブル名 FROM wa.
この場合、構造体wa の内容によって、同じ一次キーを持つデータベーステーブルの行が上書きされます。
SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は挿入されず、システム項目「SY-SUBRC 」は 4 に設定されます。
構文:
UPDATE dbtab.
この場合、テーブル作業領域dbtab の内容は同じ名称のデータベーステーブルを更新するために使用されます。このテーブル作業領域は TABLES 命令を使って宣言しなければなりません。なお、データベーステーブルの名称を動的に指定することができません。
構文:
UPDATE テーブル名 SET ~ WHERE ~.
SY-SUBRC:
1 行でも変更されるとシステム項目「SY-SUBRC」 は 0 に設定され、変更されない場合は 4 に設定されます。システム項目「SY-DBCNT」 には変更された行数が含まれます。
SET 命令を使用する場合は、データベーステーブルを動的に指定することはできません。
構文:
UPDATE テーブル名FROM TABLE itab.
内部テーブルitab の内容によって、同じ一次キーを持つデータベーステーブル <dbtab> の行が上書きされます。 指定されたキーを持つ行がないために行を変更できない場合は、操作全体を終了することなく内部テーブルの次の行が続いて処理されます。
SY-SUBRC:
内部テーブルのすべての行が処理されると、システム項目「SY-SUBRC」 が 0 に設定されます。それ以外の場合は 4 に設定されます。すべての行が使用されない場合、内部テーブルの行の総数から、システム項目「SY-DBCNT 」で処理された行数を引くことによって未使用行の数を計算することができます。内部テーブルが空白の場合、SY-SUBRC および SY-DBCNT は 0 に設定されます。
データベーステーブルの複数行を上書きする場合は、1 行ずつ変更するよりも内部テーブルを利用した方が効率的です。
テーブルの既存行を削除するには、下記のような方法があります。
構文:
DELETE テーブル名 FROM wa.
この場合、構造体wa の内容によって、同じ一次キーを持つデータベーステーブルの行が削除されます。
SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は削除されず、システム項目「SY-SUBRC 」は 4 に設定されます。
構文:
DELETE dbtab.
この場合、テーブル作業領域dbtab の内容は同じ名称のデータベーステーブルから削除するために使用されます。このテーブル作業領域は TABLES 命令を使って宣言しなければなりません。なお、データベーステーブルの名称を動的に指定することができません。
構文:
DELETE FROM テーブル名 WHERE ~.
SY-SUBRC:
1 行でも削除されるとシステム項目「SY-SUBRC」 は 0 に設定され、削除されない場合は 4 に設定されます。システム項目「SY-DBCNT」 には削除された行数が含まれます。
構文:
DELETE テーブル名FROM TABLE itab.
内部テーブルitab の内容によって、同じ一次キーを持つデータベーステーブル <dbtab> の行が削除されます。 指定されたキーを持つ行がないために行を削除できない場合は、操作全体を終了することなく内部テーブルの次の行が続いて処理されます。
SY-SUBRC:
内部テーブルのすべての行が処理されると、システム項目「SY-SUBRC」 が 0 に設定されます。それ以外の場合は 4 に設定されます。すべての行が使用されない場合、内部テーブルの行の総数から、システム項目「SY-DBCNT 」で処理された行数を引くことによって未使用行の数を計算することができます。内部テーブルが空白の場合、SY-SUBRC および SY-DBCNT は 0 に設定されます。
データベーステーブルの複数行を削除する場合は、1 行ずつ削除するよりも内部テーブルを利用した方が効率的です。
同じキーのデータがあれば変更し、なければ挿入するには、UPDATE、INSERTの代わりにMODIFY命令を使用でき、行の挿入と同じように下記の方法があります。
MODIFY テーブル名 FROM wa.
MODIFY dbtab.
MODIFY テーブル名 FROM TABLE itab[ACCEPTING DUPLICATE KEYS]
詳細は「行の挿入」をご参照ください。