对于简单视图,可以直接执行 insert、update 和 delete 操作。但是对于复杂视图,不允许直接执行 insert、update 和 delete 操作。当视图符合以下任何一种情况时,都不允许直接执行 dml 操作。具体情况如下。

    A、具有集合操作符(union、union all、intersect、minus)。
    B、具有分组函数(min()、max()、sun()、avg()、count() 等)。
    C、具有 group by、connect by 或 start with 等子句。
    D、具有 distinct 关键字。
    E、具有连接查询。
为了在具有以上情况的复杂视图上执行 dml 操作,必须要基于视图建立 instead of 触发器。在建立了 instead of 触发器之后,就可以基于复杂视图执行 insert、update 和 delete 语句。但建立 instead of 触发器有以下注意事项。
    A、instead of 选项只适用于视图。
    B、当基于视图建立触发器时,不能指定 before 和 after 选项。
    C、在建立视图时不能指定 with check option 选项。
    D、在建立 instead of 触发器时,必须指定 for each row 选项。
下面是一个简单的使用 instead of 触发器的列子:
1、建立复杂视图 dept_emp
视图是逻辑表,本身没有任何数据。视图只是对应于一条 select 语句,当查询视图时,其数据实际是从视图基表上取得。
create or replace view dept_emp as select a.deptno, a.dname, b.empno, b.ename from dept a, emp b where a.deptno = b.deptno;

当执行以上语句建立了复杂视图 dept_emp 之后,直接查询视图 dept_emp 会显示部门及其雇员信息

但不允许执行dml操作
2、建立 instead of 触发器
为了在复杂视图上执行 dml 操作,必须要基于复杂视图来建立 instead of 触发器。下面以在复杂视图 dept_emp 上执行 insert 操作为例,说明建立 instead of 触发器的方法。
create or replace trigger tr_instead_of_dept_emp instead of insert on dept_emp for each row
declarev_temp int;
beginselect count(*) into v_temp from dept where deptno = :new.deptno;if v_temp = 0 theninsert into dept(deptno, dname) values(:new.deptno, :new.dname);end if;select count(*) into v_temp from emp where empno = :new.empno;if v_temp = 0 theninsert into emp(empno, ename, deptno) values(:new.empno, :new.ename, :new.deptno);end if;
end;
/

当建立了 instead of 触发器 tr_instead_of_dept_emp 之后,就可以在复杂视图 dept_emp 上执行 insert 操作。

执行了上面的 insert 语句之后,就分别为 dept 和 emp 表插入一条数据,可查询视图 dept_emp查看结果。

Instead Of 触发器相关推荐

  1. MySQL 学习笔记(8)— 触发器

    1. 触发器概念 触发器是 MySQL 响应以下任意语句而自动执行的一条 MySQL 语句(或位于BEGIN 和 END 语句之间的一组语句) INSERT UPDATE DELETE 其他 MySQ ...

  2. Oracle 触发器 Update 不能操作本表的疑问

    今天要解决一个需求,类似表A有个字段叫flag存储的是0 or  1 ,当一行记录更改为1的时候,其他行同字段要变为0. 这样的需求第一个思路想尝试下能否用触发器来实现 create or repla ...

  3. SQL SERVER 触发器示例

    触发器是一种特殊的存储过程. 触发器语法 : CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { FOR | A ...

  4. mysql触发器菜鸟_mysql触发器学习

    创建一个触发器 语法:create trigger 触发器名字create trigger xiaoshou_update_trigger after update on xiaoshou for e ...

  5. 【Postgresql】触发器某个字段更新时执行,行插入或更新执行

    [Postgresql]触发器某个字段更新时执行,行插入或更新执行 1. postgresql触发器 2. 触发器的创建及示例 1) 字段更新时,触发 2) 行插入或更新时,触发 3. 触发器的删除 ...

  6. 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶

    数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...

  7. Sqlserver的触发器的简单使用

    1,触发器有两种 (1)After触发器(之后触发) 触发器有个好处:就是你之前有过什么操作他会将你的操作的数据信息完整的保存下来,比如你删过什么信息,如果用触发器,那么删除后就会显示两行受影响,那么 ...

  8. 实验6 触发器的使用

    实验6 触发器的使用 实验目的 掌握触发器的创建.修改和删除操作. 掌握触发器的触发执行. 掌握触发器与约束的不同. 二.实验要求 1.创建触发器. 2.触发器执行触发器. 3.验证约束与触发器的不同 ...

  9. Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...

    在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该项目 ...

  10. 利用MySQL触发器实现check和assertion

    MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...

最新文章

  1. 关于WriteFile函数的lpNumberOfBytesWritten在Win8开始的不同
  2. 【数字信号处理】序列傅里叶变换 ( 狄义赫利条件 | 序列傅里叶变换定义 )
  3. mysql数据库搜索字符_在MySQL数据库中快速搜索字符串?
  4. Statement和PraparedStatement区别
  5. Python–新一代编程语言
  6. 剑指offer 变态跳台阶
  7. 关于cocos creator换装功能的实践与思考
  8. bootstrap网格系统_如何使用Bootstrap网格系统?
  9. http 412 precondition failed
  10. opencv resize
  11. WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效...
  12. Mybatis破MySql8小时断线问题
  13. linux挂载ipsan存储,centos系统ISCSI挂载IPSAN存储
  14. MUI框架常用代码段
  15. 风电变桨滑环工作原理
  16. 全球定位经纬度的方法现在是GPS等系统定位,以前是指南针罗盘六分仪
  17. mac上使用Mounty软件报错The volume NETAC is not re-mountable in read/write mode
  18. 十大web安全扫描工具
  19. 重磅成果丨ASAM SOVD 1.0.0正式发布
  20. jquery日历插件daterangepicker全面详解汇总

热门文章

  1. 新型养老机构的“智安”神器 | ​钛颐康智慧养老物联网平台
  2. 计算机主机的组成部分,计算机主机的组成是有哪些
  3. .NET的RulesEngine(规则引擎)使用
  4. Jacobi法求特征值特征向量
  5. mac java报内存不足_苹果电脑显示内存不足怎么办_mac提示内存不足的解决方法-系统城...
  6. 中国石油大学《马克思主义基本原理》第三阶段在线作业
  7. Java证件照剪切_GitHub - cacacai/idPicCut: 对原始证件照进行压缩,剪裁,换背景,(美颜)...
  8. 第三方对接秀米图文编辑器遇到的坑
  9. 七夕祝福网页制作_七夕福利 | 程序员土味情话大PK,专属好礼等你拿
  10. 透过年报看区块链股的含金量:无一披露此业务营收 近5成停留在研究