触发器中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:等待资源时检测到死锁;

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页