Oracle12C--instead-of触发器(五十六)

本文介绍了如何在Oracle12C中使用替代触发器来处理视图的插入、更新和删除操作。当视图由多张表组成,直接操作视图会受限。通过示例展示了如何创建INSERT、UPDATE和DELETE的替代触发器,确保数据正确地更新到底层表中。同时讨论了不可更新视图的原因,并提供了将多个DML操作集中在单一触发器中的实现方式。
摘要由CSDN通过智能技术生成
  • 在视图上定义替代触发器
    • 定义:对视图进行触发器的定义,被称为替代(instead-of)触发器;
    • 视图的问题:如果定义了一个由多张数据表一起显示的视图,这个时候用户是无法对此视图执行更新或增加数据的操作的;
      • 通过一个示例,说明这个问题:创建一张包含20部门雇员编号、姓名、职位、基本工资、部门编号、部门名称、位置的视图;

CREATE OR REPLACE VIEW v_myview AS

SELECT e.empno , e.ename , e.job , e.sal , d.deptno , d.dname , d.loc

FROM emp e,dept d

WHERE e.deptno=d.deptno AND d.deptno=20 ;

  • 向视图插入一条数据

INSERT INTO v_myview (empno , ename, job , sal , deptno,dname,loc)

VALUES (6688, '魔乐' , 'CLERK' , 2000, 50 , '教学' , '北京') ;

运行结果:

错误报告:

SQL 错误: ORA-01776: 无法通过联接视图修改多个基表

  • 可通过替代触发器对视图所映射的数据表直接及进行操作:
  • 创建语法:
  • 注意:替代触发器可以解决视图的一些更新操作问题,但对于不可更新的视图依然无法实现操作,当视图中包含了以下的结构之一,就表示为不可更新的视图:
    • 统计函数;
    • CASEDECODE语句;
    • GROUP BY,HAVING子句;
    • DISTINCT消除重复列;
    • 集合运算连接;
  • 实现视图增加数据的替代触发器
    • 说明:因为视图本身由多张数据表查询得来,想实现数据增加,就要将这些增加的数据设置到不同的表中,可用替代触发器完成;
    • 示例1:创建一个INSERT替代触发器,用于执行视图更新操作
      • 分析:
        • 由于此时需要通过视图执行数据增加操作,所以要在替代触发器中实现具体的增加数据操作,分别将要增加的deptemp<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值