10. INSTEAD OF 触发器
用途:对那些由于基本表包括连接而不能直接通过 INSERT、 UPDATE 和 DELETE 语句修改的视图提供了明晰的修改方法
由于是 Oracle 触发了触发器而不是触发器语句来触发,所以称它为 INSTEAD OF
触发器对用户是透明的,因为用户根据视图编写正常的 DML 语句, INSTEAD OF 触发器负责更改
可以将它置于“对象视图”中以插入、更新或删除基本关系表中的数据
11. INSTEAD OF 触发器创建
例如
CREATE TRIGGER emp_insert
INSTEAD OF INSERT ON emp_view
BEGIN
语句 ;
END;
12. 触发器的限制
SELECT 语句必须是 SELECT INTO 语句或内部游标声明
不允许 DDL 声明和事务控制语句
如果由触发器调用,则存储子程序不能包括事务控制语句
:old 和 :new 值的类型不能是 LONG 和 LONG RAW
13. 启用/禁用触发器
可以启用也可以禁用触发器
在发出触发语句时,执行启用的触发器
不执行禁用的触发器
默认情况下,所有触发器在首次创建时都是启用的
禁用特定触发器
ALTER TRIGGER <触发器名> DISABLE;
禁用特定表的所有触发器
ALTER TABLE <表名> DISABLE ALL TRIGGERS;
启用特定触发器
ALTER TRIGGER <触发器名> ENABLE;
启用特定表的所有触发器
ALTER TABLE <表名> ENABLE ALL TRIGGERS;
14. 删除触发器
可以使用 DROP 命令删除触发器
DROP TRIGGER <触发器名>;
例如
DROP TRIGGER flight_update;
15. 编译和调试触发器
触发器编译涉及三个阶段
语法检查
语义检查
代码生成
在发出 CREATE TRIGGER 命令时,将完整编译触发器
如果在编译期间出错,仍然会创建触发器,但是执行它的所有指令都将失败
要手动重新编译触发器,可以使用 ALTER TRIGGER 命令
ALTER TRIGGER <triggername> COMPILE;
SHOW ERRORS 命令可以用于查看编译错误
SHOW ERRORS TRIGGER <触发器名>;