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(挿入)

1REPORT ZTEST_PROGRAM_DBOP_INSERT.
2 
3PARAMETERS:
4* 選択画面
5  S_NAME TYPE NAME OBLIGATORY.       " 名前(※必須項目)
6 
7DATA:
8  WK_DB TYPE ZDBTBL_TEST_DBOP.
9 
10START-OF-SELECTION.
11 WK_DB-NAME      = S_NAME.     " 名前
12 
13INSERT INTO ZDBTBL_TEST_DBOP VALUES WK_DB.
14 
15END-OF-SELECTION.

検証手順

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

UPDATE(更新)

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

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

サンプルコード

UPDATE(更新)

1PARAMETERS:
2* 選択画面
3  S_NAME TYPE NAME OBLIGATORY.       " 名前(※必須項目)
4 
5DATA:
6  WK_DB TYPE ZDBTBL_DBOP_UP.
7 
8START-OF-SELECTION.
9SET COUNTRY 'JP'.
10 
11 WK_DB-NAME      = S_NAME.   " 名前
12 WK_DB-ZDATE      = SY-DATUM.     " システム日付
13 
14UPDATE ZDBTBL_DBOP_UP FROM WK_DB.
15 
16END-OF-SELECTION.

検証手順

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

DELETE(削除)

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

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

サンプルコード

DELETE(削除)

1REPORT ZTEST_PROGRAM_DBOP_DELETE.
2PARAMETERS:
3* 選択画面
4  S_NAME TYPE NAME OBLIGATORY.       " 名前(※必須項目)
5 
6DATA:
7  WK_DB TYPE ZDBTBL_DBOP_DEL.
8 
9START-OF-SELECTION.
10SET COUNTRY 'JP'.
11 
12 WK_DB-NAME      = S_NAME.   " 名前
13 
14DELETE ZDBTBL_DBOP_DEL FROM WK_DB.
15 
16END-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命令

f