ホームページ > データベース > Oracle > オラクルトリガーの書き方

オラクルトリガーの書き方

WBOY
リリース: 2022-01-25 12:07:20
オリジナル
15449 人が閲覧しました

Oracle では、トリガーは、指定された条件が満たされたときに、定義されたステートメントを自動的に実行します。これは、「作成 [または置換] トリガー トリガー名 トリガー時間 テーブル名上のトリガー イベント [各行] begin pl」と記述されます。 /sql ステートメントの終了」。

オラクルトリガーの書き方

このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle トリガーの書き方

1. トリガーの概要

トリガーの定義は、特定の条件が成立したときに、トリガー コンテナーに定義されたステートメントは自動的に実行されます。

したがって、トリガーを手動で呼び出す必要はなく、呼び出すこともできません。

次に、実際にトリガーを定義するときに、そのトリガー条件が設定されます。

ここで、トリガーはステートメントレベルのトリガーと行レベルのトリガーに分類できることを説明する必要があります。

詳細については、インターネット上の情報を参照してください。簡単に言えば、ステートメント レベルのトリガーは、特定のステートメントの実行前または実行後にトリガーできます。行レベルのトリガーは、定義されたトリガー テーブル内の行データが変更されたときに 1 回トリガーされます。

具体例:

1. テーブルに定義されたステートメントレベルのトリガー テーブルが削除されると、プログラムはトリガーに定義された操作プロセスを自動的に実行します。これは、テーブルの削除操作がトリガの実行条件となることを意味します。

2. テーブルに行レベルのトリガーが定義されている場合、レコード行の削除など、テーブル内のデータ行が変更されると、トリガーが自動的に実行されます。

2. トリガー構文

トリガー構文:

create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
begin
 pl/sql语句
end
ログイン後にコピー

そのうち:

  • トリガー トリガー名: トリガーオブジェクトの名前。トリガーはデータベースによって自動的に実行されるため、名前は単なる名前であり、実際の目的はありません。

  • トリガー時間: トリガーがいつ実行されるかを示します。値はオプションです:

  • before: データベースの前にトリガーが実行されることを示しますaction;

  • after: データベース アクションの後にトリガーが実行されることを示します。

  • トリガー イベント: どのデータベース アクションがこのトリガーをトリガーするかを示します:

  • insert: データベースの挿入によりこのトリガーがトリガーされます;

  • update: データベースの変更によりこのトリガーがトリガーされます;

  • delete: データベースの削除によりこのトリガーがトリガーされます。

  • テーブル名: データベース トリガーが配置されているテーブル。

  • 各行: トリガーはテーブルの各行に対して 1 回実行されます。このオプションを使用しない場合、テーブル全体に対して 1 回だけ実行されます。

トリガーは次の機能を実現できます:

機能:

1. テーブルへの変更を許可/制限します

2。自動インクリメント フィールドなどの派生列を自動的に生成します

3. データの一貫性を強化します

4. 監査とログを提供します

5. 無効なトランザクション処理を防止します

6. 複雑なビジネス ロジックを有効にする

1) 週末にテーブルを変更できないようにするために、テーブル tb_emp を更新する前に次のトリガーがトリガーされます。

create or replace trigger auth_secure before insert or update or DELETE
on tb_emp
begin
  IF(to_char(sysdate,'DY')='星期日') THEN
    RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp');
  END IF;
END;
/
ログイン後にコピー

2)、トリガーを使用してシリアル番号の自動インクリメントを実現します

テスト テーブルを作成します:

create table tab_user(
  id number(11) primary key,
  username varchar(50),
  password varchar(50)
);
ログイン後にコピー

シーケンスを作成します:

コードをコピーします。

create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;
ログイン後にコピー

トリガーの作成:

CREATE OR REPLACE TRIGGER MY_TGR
 BEFORE INSERT ON TAB_USER
 FOR EACH ROW--对表的每一行触发器执行一次
DECLARE
 NEXT_ID NUMBER;
BEGIN
 SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL;
 :NEW.ID := NEXT_ID; --:NEW表示新插入的那条记录
END;
ログイン後にコピー

テーブルへのデータの挿入:

insert into tab_user(username,password) values('admin','admin');
insert into tab_user(username,password) values('fgz','fgz');
insert into tab_user(username,password) values('test','test');
COMMIT;
ログイン後にコピー
クエリ テーブルの結果: SELECT * FROM TAB_USER;

推奨チュートリアル: 「

Oracle ビデオ チュートリアル >>

以上がオラクルトリガーの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート