基本结构
create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] when(condition) begin pl/sql语句 end
触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
- before:表示在数据库动作之前触发器执行;
- after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
- insert:数据库插入会触发此触发器;
- update:数据库修改会触发此触发器;
- delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
场景
/**********在触发器中阻止非法操作**********/ CREATE OR REPLACE TRIGGER "ABCDE" BEFORE INSERT OR DELETE OR UPDATE ON TABLE1 FOR EACH ROW BEGIN IF(TO_CHAR(SYSDATE,'DAY') IN ('星期五','星期天')) THEN RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改表格triggertest'); END IF; END; /**********在触发器中操作新值和旧值**********/ CREATE OR REPLACE TRIGGER "ABCDE" BEFORE UPDATE ON TABLE1 FOR EACH ROW DECLARE //注意声明变量 BEGIN :NEW.T_AGE := :NEW.T_AGE + :OLD.T_AGE; END; /**********对特定的行进行操作**********/ CREATE OR REPLACE TRIGGER "ABCDE" BEFORE DELETE ON TABLE1 FOR EACH ROW WHEN(OLD.T_AGE<17) //使用when设置过滤条件 BEGIN RAISE_APPLICATION_ERROR(-20001,'他还是个未成年'); END; /**********删除触发器**********/ drop trigger "ABCDE";