理论教育 Oracle数据库管理与开发:INSTEADOF触发器

Oracle数据库管理与开发:INSTEADOF触发器

时间:2023-10-30 理论教育 版权反馈
【摘要】:INSTEAD OF触发器是针对视图上的DML操作创建的触发器,用于替代触发事件本身的操作,也就是说当向视图进行DML操作时,触发触发器的操作,而触发事件本身不会被执行,仅执行级触发器要求执行的语句。创建INSTEAD OF触发器的语法格式如下:其中:①INSTEAD OF:指出创建的触发器是替代触发器。④没有必要在针对一个表的视图上创建INSTEAD OF触发器,只要创建DML触发器即可。

Oracle数据库管理与开发:INSTEADOF触发器

INSTEAD OF触发器是针对视图上的DML操作创建的触发器,用于替代触发事件本身的操作,也就是说当向视图进行DML操作时,触发触发器的操作,而触发事件本身不会被执行,仅执行级触发器要求执行的语句。因为大量的视图,本身并不能进行DML操作,比如视图定义语句中包含GROUP BY子句、DISTINCT关键字、计算表达式形成的虚拟列等,这样的视图本身就不能进行一些DML操作。而替代触发器,就可以巧妙地避开这些限制,实现部分基表数据的DML操作。

创建INSTEAD OF触发器的语法格式如下:

其中:

①INSTEAD OF:指出创建的触发器是替代触发器。

②view_name:指出触发事件所操作的视图名称。

创建INSTEAD OF触发器需要注意以下几点:(www.daowen.com)

①只能被创建在视图上,并且该视图没有指定WITH CHECK OPTION选项。

②不能指定BEFORE或AFTER选项。

③FOR EACH ROW子句是可选的,即INSTEAD OF触发器只能在行级上触发或只能是行级触发器,没有必要指定。

④没有必要在针对一个表的视图上创建INSTEAD OF触发器,只要创建DML触发器即可。

下面的示例用于演示替代触发器的工作方式。先以雇员表employees和部门表departments连接查询创建一个视图v_emp_dept,视图包含两个表的部分列数据。然后创建一个替代触发器,向这个视图插入数据行。如果插入的数据行中的部门ID是一个新的,则除了向雇员表插入数据外,还需要同时向部门表插入新的部门;如果是一个原有的部门ID,则只需要插入雇员信息就可以了。实际上在触发执行时,插入数据到视图的操作并没有执行,执行的是触发器里的分别向雇员表和部门表插入数据的操作。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈