|
4. INSERT 触发器
|
例1,每在离退休表freeemp中增加一个职工记录时,同时要在在职人员表work_table中删除一条相应的职工记录。定义触发器如下:
CREATE TRIGGER freeemp //触发器名称freeemp
ON free_table //作出向free_tableInsert的动作
FOR INSERT
AS
DELETE FROM work_table //发生的条件为从work_table中删除记录
WHERE free_table.no = work_table.no //设定free_table插入的no为相应work_table的no |
5.UPDATE触发器
|
例2,该触发器是在对emp表的sal属性执行update语句时触发:每修改一个职工的工资,就检查新工资是否比原工资低,若是低,则恢复原工资而不做修改。
CRATE TRIGGER newsaltrigger //触发器名称newsaltrigger
AFTER UPDATE OF sal ON emp //在对emp表的sal属性更新时触发
REFERENCING OLD AS oldtuple NEW AS newtuple
WHEN(newtuple.sal < oldtuple.sal) //当新工资低于旧工资时触发
UPDATE emp
SET sal = oldtuple.sal //更新emp表,设定工资为旧工资。
WHERE eno =newtuple.eno //更新条件emp表的eno等于newtuple表的eno。
FOR EACH ROW ; |
6.DELETE触发器
|
例3,如图4-26所示,通路P3包括R1,R2,R3,从通路表CONNECTION删除其中任何一条通路,都要将整个通路的所有矩形从矩形表RECTANGLE中全部删除,这时就要用触发器实现。
CREATE TRIGGER T3 //触发器名称T3
ON CONNECTION //对connection表
FOR DELETE //当发生删除事件时
AS DELETE RECTANGLE
WHERE RECTANGLE.path = CONNECTION.path_name
//动作为从rectangle表中删除path=connection.path_name的元组。 |
图4-26 通路P3
|
|