DB操作(INSERT、UPDATE、DELETE)

21.1 DB操作(INSERT、UPDATE、DELETE)

1. DB操作(INSERT、UPDATE、DELETE)

データベースの操作について説明します。

  • INSERT(挿入)
  • UPDATE(更新)
  • DELETE(削除)

INSERT(挿入)

INSERTは、データベーステーブルに、レコードを挿入するための構文です。
挿入したい構造と挿入先のデータベーステーブルは、
同じ構造を持っている必要があります。

挿入できるかどうかの判断は、データベーステーブルのキー項目を見て判断するため、データベーステーブルに存在するキー項目を含む場合は、
実行時エラーになってしまいます。

単一レコードを挿入したい場合

INSERT(ACCEPTING DUPLICATE KEYS)

オプションとしてINSERT命令の最後に、「ACCEPTING DUPLICATE KEYS.」と記述すると、同じキーを持つ項目を挿入してもショートダンプが発生せずに、リターンコード(SY-SUBRC)に「4」が設定されます。
通常は、一括挿入する前にチェックを入れるか、一括挿入した後、重複キーを持つ項目があった場合は、ロールバックを行うなどして、調整を行います。

サンプルコード

INSERT(挿入)

REPORT ZTEST_PROGRAM_DBOP_INSERT.

PARAMETERS:
* 選択画面
  S_NAME TYPE NAME OBLIGATORY.       " 名前(※必須項目)

DATA:
  WK_DB TYPE ZDBTBL_TEST_DBOP.

START-OF-SELECTION.
 WK_DB-NAME      = S_NAME.     " 名前

INSERT INTO ZDBTBL_TEST_DBOP VALUES WK_DB.

END-OF-SELECTION. 

検証手順

1. 任意の値を[S_NAME]に入力
2. 実行ボタンを押下
3. データブラウザ[SE16]でテーブル名[ZDBTBL_TEST_DBOP]の内容を確認

UPDATE(更新)

UPDATEは、文字通り、データベース上のレコードの更新を行うことができる命令です。
更新したい内部テーブル、もしくは構造と更新先のデータベーステーブルは、同じ構造を持っている必要があります。
更新の際は、データベーステーブルで設定されているキー項目と内部テーブル、もしくは構造のキー項目が一致したレコードを対象とします。
同じ値のキー項目が存在しない場合は、更新は行われません。

SET句には、更新したいデータベース側の項目と、更新したい構造の項目を指定します。WHERE句には 更新する時の条件式を記述します。
この時、注意しなくてはいけない点は、この構文では更新の際にキー項目を参照せずにWHERE条件のみを見て更新するということです。
条件次第では、データベーステーブルのすべてのレコードを更新してしまう可能性があるので注意が必要です。

サンプルコード

UPDATE(更新)

PARAMETERS:
* 選択画面
  S_NAME TYPE NAME OBLIGATORY.       " 名前(※必須項目)

DATA:
  WK_DB TYPE ZDBTBL_DBOP_UP.

START-OF-SELECTION.
SET COUNTRY 'JP'.

 WK_DB-NAME      = S_NAME.   " 名前
 WK_DB-ZDATE      = SY-DATUM.     " システム日付

UPDATE ZDBTBL_DBOP_UP FROM WK_DB.

END-OF-SELECTION. 

検証手順

1. データブラウザ[SE16]で
2. テーブル名[ZDBTBL_DBOP_UPDATE]の内容を確認
3. Aを[S_NAME]に入力
4. 実行ボタンを押下
5. 日付(ZDATE)を確認し、実行した日付に更新されていること

DELETE(削除)

DELETEは、データベース上のレコードを削除する時に用いられる命令です。
誤ってレコードを削除してしまうと元に戻すことはできないので、削除する時は特に注意しましょう。

WHERE句で、削除したいレコードを直接指定することができます。
しかし、例えば、条件指定した頂目が、複数件存在する場合は、そのすべてを削除してしまうので注意が必要です。

サンプルコード

DELETE(削除)

REPORT ZTEST_PROGRAM_DBOP_DELETE.
PARAMETERS:
* 選択画面
  S_NAME TYPE NAME OBLIGATORY.       " 名前(※必須項目)

DATA:
  WK_DB TYPE ZDBTBL_DBOP_DEL.

START-OF-SELECTION.
SET COUNTRY 'JP'.

 WK_DB-NAME      = S_NAME.   " 名前

DELETE ZDBTBL_DBOP_DEL FROM WK_DB.

END-OF-SELECTION. 

検証手順

1. データブラウザ[SE16]でテーブル名[ZDBTBL_DBOP_DELETE]の内容を確認
2. プログラムを起動し、“A”をS_NAME に入力
3. データブラウザ[SE16]で、テーブル名[ZDBTBL_DBOP_DELETE]の内容を確認
4. S_NAME の “A”のレコードが削除されていること


NEXT>> 21.2 COMMIT WORK / ROLLBACK WORK命令