Oracle では、トリガーは、指定された条件が満たされたときに、定義されたステートメントを自動的に実行します。これは、「作成 [または置換] トリガー トリガー名 トリガー時間 テーブル名上のトリガー イベント [各行] begin pl」と記述されます。 /sql ステートメントの終了」。
このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。
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 サイトの他の関連記事を参照してください。