触发器中OLD和NEW的使用

一、old和new在Oracle中不区分大小写;

二、old和new可以用在declare中也可以用在begin里的sql语句;(只会在begin中的sql语句里用)

三、old表示插入之前的值,new表示新插入的值;

(old用在删除和修改,new用在添加和修改)(但是用delete new值也没有报错,不知道怎么回事)

create or replace trigger trigger_name                       --触发器名不能过长,否则报错:ORA-00972:标识符过长

before insert or update of colunm1,column2,、、、

on table_name

for each row      --行级触发器,一般表记的会报错,没有深入研究

declare              --声明参数

pragma autonomous_transaction;             --自治事务

parameter_name 参数类型;                        --参数

begin 

if  inserting  then

insert into table_name values(:new.字段名1,:new.字段名2,、、、);

elsif  updating then

update table_name set  表字段名=:new.字段名,、、、 where 字段名=:new.字段名;

end if;

commit; --自治事务的提交,若没有自治事务,触发器是不允许有commit的

end;

注意:

sql语句中的表与触发器的表不相同,如果相同且不加自治事务会导致报错:ORA-04091:表XXX发生了变化,触发器/函数不能读它;

即使添加了自治事务,要是当表的某个字段发生变化,对另一张表进行操作之后,又对该有触发器的表字段进行修改,

也会报错:ORA-00060:等待资源时检测到死锁;

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值