create table t_temp
(
id varchar2(10) primary key,
len1 number(6,0),
len2 number(6,0),
len number(7,0)
)
当update某一行的len1或len2值后,则修改该行len的值(len = len1 + len2),
或者insert 一条新的记录后,修改len = len1 + len2
哪位帮我用触发器实现上面的功能
(
id varchar2(10) primary key,
len1 number(6,0),
len2 number(6,0),
len number(7,0)
)
当update某一行的len1或len2值后,则修改该行len的值(len = len1 + len2),
或者insert 一条新的记录后,修改len = len1 + len2
哪位帮我用触发器实现上面的功能
befor insert or update on t_temp
for each row
begin
:NEW.len := :NEW.len1 + :NEW.len2;
end;
before insert or update of len1,len2
on t_temp
for each row
begin
:new.len:=:new.len1+:new.len2;
end;
当update某一行的len1或len2值后
或者insert 一条新的记录后
SQL> select * from t_temp;ID LEN1 LEN2 LEN
---------- ------- ------- --------
1 2 1 2
2 2 3 5SQL>
SQL> create or replace trigger tri_t_tmp
2 before insert or update of len1,len2
3 on t_temp
4 for each row
5 begin
6 :new.len:=:new.len1+:new.len2;
7 end;
8 /Trigger createdSQL> insert into t_temp values('3',4,1,2);1 row insertedSQL> select * from t_temp;ID LEN1 LEN2 LEN
---------- ------- ------- --------
1 2 1 2
2 2 3 5
3 4 1 5SQL> update t_temp set len1=100 where id='1';1 row updatedSQL> select * from t_temp;ID LEN1 LEN2 LEN
---------- ------- ------- --------
1 100 1 101
2 2 3 5
3 4 1 5SQL>
由于插入或更改的记录的len值要根据len1和len2进行修改,此时需要记录尚未更改或插入,才能对:new.colname进行赋值。
否则就需要改成表级触发器,进行update全表操作,有不必要的麻烦
before insert or update of len1, len2 on A
for each row
begin
:NEW.len := :NEW.len1 + :NEW.len2;
end;
谢谢!
before insert or update of len1,len2
on t_temp
for each row
begin
:new.len:=:new.len1+:new.len2;
end;