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”のレコードが削除されていること