DB更新

 

このトピックでは、OpenSQLによりDBデータを更新する方法を取り上げて説明します。

行の挿入

テーブルに行を挿入するには、1件ずつ挿入と一括挿入の二つの方法があります。

1行挿入

テーブルに1行データを挿入するには、下記のような方法があります。

構造体による1行挿入

構文:

INSERT INTO テーブル名 VALUES wa. 又は INSERT テーブル名 FROM wa.

この場合、構造体wa の内容がデータベーステーブルに書き込まれます。

SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は挿入されず、システム項目「SY-SUBRC 」 は 4 に設定されます。

テーブル作業領域による1行挿入

構文: 

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 行ずつ挿入するよりも内部テーブルを利用した方が効率的です。

行の変更

テーブルの既存行のデータを変更するには、下記のような方法があります。

1行変更

構造体による1行変更

構文:

UPDATE テーブル名 FROM wa.

この場合、構造体wa の内容によって、同じ一次キーを持つデータベーステーブルの行が上書きされます。

SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は挿入されず、システム項目「SY-SUBRC 」は 4 に設定されます。

テーブル作業領域による1行変更

構文:

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 行ずつ変更するよりも内部テーブルを利用した方が効率的です。

行の削除

テーブルの既存行を削除するには、下記のような方法があります。

1行削除

構造体による1行削除

構文:

DELETE テーブル名 FROM wa.

この場合、構造体wa の内容によって、同じ一次キーを持つデータベーステーブルの行が削除されます。

SY-SUBRC:
作業は正常に終了すれば、システム項目「SY-SUBRC 」は 0 に設定されます。それ以外の場合、行は削除されず、システム項目「SY-SUBRC 」は 4 に設定されます。

テーブル作業領域による1行削除

構文:

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]

詳細は「行の挿入」をご参照ください。

ログインするとコメントできます。