見出し画像

【Oracle】更新トリガー

こんにちはあるいはこんばんは

久しぶりにOracleを使ったシステム構築を行いました

さて、以下のようなことがしたくてGoogleで調べたのですか、実際に実行可能なサンプルをみつけられませんでした

顧客管理テーブルを更新した際に顧客管理テーブルの更新回数という項目を自動で加算したい

ということで、ChatGPTの出番です

oracle テーブルの更新時にトリガーで自身のテーブルの項目を更新する方法

テーブルの項目の番号をインクリメントする方法

プロンプト

一部抜粋ですが完璧な答えが返ってきました

Oracleデータベースで、テーブルの特定の項目(例えば、`sequence_number` 列)の値を更新時にインクリメントするトリガーを作成するには、以下のようにします。以下の例では、`my_table` テーブルの `sequence_number` 列の値をインクリメントするトリガーを示します。

```sql
CREATE OR REPLACE TRIGGER trg_increment_sequence_number
BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
-- 現在の sequence_number の値をインクリメント
:NEW.sequence_number := :OLD.sequence_number + 1;
END;
/
```

### トリガーの詳細説明

- **`CREATE OR REPLACE TRIGGER trg_increment_sequence_number`**: トリガーの名前を指定します。ここでは `trg_increment_sequence_number` としています。
- **`BEFORE UPDATE ON my_table`**: `my_table` テーブルが更新される前にトリガーが発火します。
- **`FOR EACH ROW`**: 更新される各行に対してトリガーが適用されます。
- **`:NEW.sequence_number := :OLD.sequence_number + 1;`**: 更新前の値 (`:OLD.sequence_number`) に 1 を足して、新しい値 (`:NEW.sequence_number`) として設定します。

このトリガーにより、`my_table` テーブルの任意の行が更新されるたびに、その行の `sequence_number` 列の値が 1 増加します。

ChatGPT
CREATE OR REPLACE TRIGGER trg_increment_sequence_number
BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
  -- 現在の sequence_number の値をインクリメント
  :NEW.sequence_number := :OLD.sequence_number + 1;
END;
/

ことあとに、テーブルのDDL、更新トリガーのサンプルも示してくれました

プログラム系は本当にChatGPTは強いなと感じました

昔は専門書籍を片手に、最近はGoogleで調べる(ググる)、これからは生成AIに聞く時代ですね


この記事が気に入ったらサポートをしてみませんか?