コンテンツにスキップ

9.4 データ入力と変更

LOOKUPテーブルの入力、更新、削除を、一連の実行可能な例で説明します。

サンプルテーブルの準備

次の例は、最後のクリーンアップ文まで順に実行できます。

CREATE LOOKUP TABLE ch9_mutation (
    code       VARCHAR(32) PRIMARY KEY,
    label      VARCHAR(64),
    status     VARCHAR(16),
    updated_at DATETIME
);

INSERT INTO ch9_mutation VALUES ('TEMP', 'Temperature', 'ACTIVE', NOW);
INSERT INTO ch9_mutation VALUES ('PRESS', 'Pressure', 'ACTIVE', NOW);

SEQUENCEキーが必要なら、SEQUENCEを参照してください。

UPDATE

単一行の変更はPRIMARY KEY条件で処理します。

UPDATE ch9_mutation
SET status = 'INACTIVE',
    updated_at = NOW
WHERE code = 'TEMP';

複数行を変更する場合は、先に同じWHERE句で対象を検索します。 単一行の変更には、対象が明確でインデックスを使用できるPRIMARY KEY条件を推奨します。

PRIMARY KEY列自体はUPDATEできません。キーを変更する場合は、既存行を削除して新しいキーで再入力します。 この2文を1つのTRANSACTIONトランザクションにまとめることはできないため、途中の失敗と参照データの変更手順も設計してください。

重複キーの処理

SQL INSERTのキー重複時に更新が必要なら、ON DUPLICATE KEY UPDATEを使用します。

INSERT INTO ch9_mutation
VALUES ('TEMP', 'Temperature sensor', 'ACTIVE', NOW)
ON DUPLICATE KEY UPDATE SET label = 'Temperature sensor', status = 'ACTIVE', updated_at = NOW;

Appendでデータを挿入するときにPRIMARY KEYが重複すると、LOOKUP_APPEND_UPDATE_ON_DUPKEY設定に応じて対象行を更新できます。 この設定はLOOKUPテーブルのAppend処理における重複キーポリシーのため、本番環境では現在の設定値を確認してから使用してください。

SELECT name, value
FROM v$property
WHERE name = 'LOOKUP_APPEND_UPDATE_ON_DUPKEY';

TABLE_REFRESH

永続保存されたLOOKUPの内容を、実行中のメモリテーブルへ再反映する必要がある場合は、TABLE_REFRESHを実行します。

EXEC TABLE_REFRESH(ch9_mutation);

通常のSQL DMLの直後に毎回実行するコマンドではありません。 対象は現在のデータベースのLOOKUPテーブルであり、READ ONLYデータベースでは実行できません。 名前の範囲・権限・エラー仕様は、EXECプロシージャの正本、 クラスター運用手順は運用とライフサイクルを参照してください。

LOOKUPデータの削除

単一行の削除にはPRIMARY KEY条件を使用します。

DELETE FROM ch9_mutation
WHERE code = 'PRESS';

一般条件式を使用すると、条件に一致するすべての行を削除します。 全行を削除する場合はWHERE句を省略します。

DELETE FROM ch9_mutation;
DROP TABLE ch9_mutation;

変更操作のチェックリスト

  • 単一行の変更にはPRIMARY KEY条件を使用します。
  • 一般条件式で一括変更する前に、同じ条件で対象範囲を検索します。
  • 全行の削除前に、バックアップまたは再入力できる元データを確認します。
  • PRIMARY KEY値の変更は、DELETE後のINSERTで処理します。
  • Appendの重複キー処理では、LOOKUP_APPEND_UPDATE_ON_DUPKEY設定を確認します。
  • 永続LOOKUPを実行時メモリに再反映する必要がある場合だけ、EXEC TABLE_REFRESH(table_name)を使用します。
最終更新日