INSTEAD OF 触发器的创建

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

INSTEAD OF 触发器,也称替换触发器,是一种特殊的触发器,和其他建立在数据表上的触发器不同,INSTEAD OF 触发器建立在视图上。

在 Oracle 数据库中,复杂的视图常从多个数据表中获取数据有的视图还包含分组等计数函数,因此一般不允许对视图施加 DML操作,但是使用 INSTEAD OF 触发器,在触发器内通过定义的PL/SQL块,完成间接地对视图进行 DML操作。

下面就通过范例来学>INSTEAD OF 触发器的创建和使用。
在介绍 INSTEAD OF 触发器之前,首先创建一个视图,该视图关联数据表 emp 和 dept,代码如下所示。

CREATE VIEW test_view AS
SELECT empno,ename,dept.deptno,dname
FROM emp,dept
WHERE emp.deptno=dept.deptno;

由于 scott 用户没有创建视图的权限,因此首先应给该用户赋予创建视图的权限,如下所示。

CONN sys/change_on_install AS SYSDBA,GRANT CREATE VIEW to scott;

然后重新连接到 scott 用户下,创建前述视图。现在向该视图插入如下数据。

INSERT INTO temp_vieW VALUES(1234,’zhangsan’,'50’,chairman’)

运行代码时会出现如下错误。

如果想修改视图的内容,只有通过创建INSTEAD OF 触发器来实现。

创建INSTEAD OF 触发器以实现修改视图 test view 中的内容

视图 test_view实际上来源自两个数据表,这两个数据表通过 deptno 字段建立关联。

在Oracle 数据库中,一般要想通过 DML操作修改视图是不可行的,因为修改视图实际上是修改对应数据表中的内容,

两张数据表中数据是关联的,修改的时候,必须保证两个数据表关联字段同时修改或者增加。

下图是 INSTEAD OF 触发器的创建代码,

如下图所示,在触发体内,首先判断 dept 中是否存在要插入记录的部门编号,如果存在,则只需在emp 中添加记录就行了,

如果不存在,这时系统认为是 EXCEPTION,此时需要向两个表中都添加数据。

如已经创建替换触发器,可以试一下插入数据,如下图所示,

我们可以看出,现在可以实现向视图中插入数据

 

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值