Instead Of 触发器
来源:互联网 发布:淘宝情趣内衣晒图 编辑:程序博客网 时间:2024/05/18 13:47
对于简单视图,可以直接执行 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 rowdeclare v_temp int;begin select count(*) into v_temp from dept where deptno = :new.deptno; if v_temp = 0 then insert 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 then insert into emp(empno, ename, deptno) values(:new.empno, :new.ename, :new.deptno); end if;end;/
执行了上面的 insert 语句之后,就分别为 dept 和 emp 表插入一条数据,可查询视图 dept_emp查看结果。
0 0
- 设计 INSTEAD OF 触发器
- instead of触发器
- INSTEAD OF 触发器
- 设计 INSTEAD OF 触发器
- instead of触发器
- INSTEAD OF 触发器
- 关于 INSTEAD OF 触发器
- 关于 INSTEAD OF 触发器
- INSTEAD OF 触发器
- oracle INSTEAD OF 触发器
- Instead Of 触发器
- 触发器 insert instead of
- instead of 触发器
- 使用 Oracle Instead of 触发器
- instead of 触发器的用法
- instead of 触发器的用法
- PL/SQL --> INSTEAD OF 触发器
- instead of 和系统 触发器
- Visual Studio 问题集
- POJ3254--Corn Fields
- NSFileManager 创建,复制,删除,剪切文件
- Linux网络编程:基于TCP的程序开发
- Jasper Report Server Deployment Distilled
- Instead Of 触发器
- Linux网络编程:基于UDP的程序开发
- jQuery事件绑定.on()简要概述及应用
- 作业调度框架 Quartz 学习笔记(二) -- 简单触发器(SimpleTrigger)
- js登录与注册验证
- Linux环境下网络编程杂谈
- 通过vnc viewer 使用OSX连接windows7
- 保留自己常用的网络地址
- 作业调度框架 Quartz 学习笔记(三) -- Cron表达式