![見出し画像](https://assets.st-note.com/production/uploads/images/141310652/rectangle_large_type_2_cbe6e4dd110f6e62cbf7a559b7cabc08.jpeg?width=800)
【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 増加します。
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に聞く時代ですね
この記事が気に入ったらサポートをしてみませんか?