CREATE [OR REPLACE] TRIGGER trigger_name{BEFORE | AFTER | INSTEAD OF} {INSERT |DELETE | UPDATE | [OF 字段[,字段]。。。]}[OR {INSERT | DELETE | UPDATE [OF 字段[,字段]。。。]}]ON [用户名.]表视图名[REFERENCING [NEW AS 新行名称 ] [OLD AS 旧行名称] ][FOR EACH ROW][WHEN (条件)]DECLARE --声明BEGIN --sql代码EXCEPTION --异常处理 END [trigger_name];
BEFORE | AFTER --表示在事件之前还是之后激活触发器INSTEAD OF --如果使用此自句,表示可以由触发器代码来替代激活触发器的事件INSERT |DELETE | UPDATE | [OF 字段[,字段]。。。] --表示指定构成触发器事件的操作类型,update还可以指定列的列表REFERENCING --指定新行(更新后)的别名,旧行(更新后)的别称,默认为new 和 old ON [用户名.]表名 --要创建触发器的表或者视图的名称。FOR EACH ROW --指定是否对受影响的每个行都执行触发器,即行级触发器, --不使用此句子表示语句级触发器 WHEN (条件) --限制执行触发器的条件
------------------------------------示例一,创建触发器(行级)--------------------
如果职位不是部门经理,就把新增或者更改的员工的经理指定为员工id为2的经理
(如果要通过触发器在插入行中设置新值,必须使用 before instead 访问新值,否则不允许设置新值。如示例)
CREATE OR REPLACE TRIGGER trig_emp BEFORE INSERT OR UPDATE OF position ON employees FOR EACH ROW WHEN (new.position<>5) BEGIN :new.manager_id := 2; END trig_emp;
语句触发器是指一个dml语句触发一个操作。oracle主要掌握
instead of 触发器主要是在视图上定义的触发器。
模式触发器 也就是用户事务触发器。
数据库触发器 是指创建在数据库事件上的触发器
先创建序列xulei
CREATE OR REPLACE TRIGGER trig_new_test BEFORE INSERT ON new_test FOR EACH ROW BEGIN SELECT xulei INTO :new.id FOR dual; END trig_new_test;
转载于:https://www.cnblogs.com/hjiongjiong/p/4232226.html
相关资源:Oracle触发器修改自身表