Oracle PL/SQL进阶编程(第十二弹:替代触发器)

Oracle中的替代触发器(INSTEAD OF)主要用于视图,尤其在处理复杂视图或嵌套表时,能替代DML操作直接作用于基表。替代触发器不支持BEFORE和AFTER选项,必须指定FOR EACH ROW。创建嵌套表替代触发器,允许在含有嵌套表的视图上执行DML操作,通过PARENT谓词定位父项记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DML触发器只能应用在表上。而替代触发器只能定义在视图上。当腰对一个不能进行修改的视图进行数据的修改时,或者要修改视图中的某个嵌套表时,可以使用替代触发器。

替代触发器的作用

提到触发器,又称为INSTEAD OF触发器,它会替代原来的数据操作语句的执行,更改为使用在触发器中定义的语句来执行数据操作。

一些简单的单表视图,可以直接INSERT、UPDATE,但如果要对复杂的视图进行INSERT、UPDATE,可以通过替代触发器,将这些DML语句对视图的更改替换为对基表的 DML操作。
要注意:
- 替代触发器只能用于视图
- 当建立替代触发器时,不能指定BEFORE和AFTER选项。
- 当建立替代触发器时,视图没有指定WITH CHECK OPTION选项。
- 当建立替代触发器时,必须指定FOR EACH ROW方法。

定义替代触发器

替代触发器的定义语法和DML触发器相似,不同之处在于DML触发器中用BEFORE和AFTER指定触发时机的地方改为了INSTEAD OF,语法如下:

CREATE [OR REPLACE] TRIGGER [schema.]trigger
INSTEAD OF verb_list ON [schema.]view_name
[REFERENCING {OLD AS old} | {NEW AS new} | {PARENT AS parent}]
FOR EACH ROW
[WHEN (condition)]
plsql_block | call_procedure_statement

下面的代码创建了一个视图和一个替代触发器:

--创建视图emp_dept视图
CREATE OR REPLACE VIEW scott.emp_dept (empno,
                                       ename,
                                       job,
                                       mgr,
                                       hiredate,
                                       sal,
                                       comm,
                                       deptno,
                                       dname,
                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值