sqlserver中的inserted相当于oracle中的:new.
你的情况只要建一个for each row 级触发器,
就可以每插一次,触发一次。
create or replace trigger my_tri
before insert on yourtable
for each row
begin
insert into anothertable values(:new.yourid);
end;
你的情况只要建一个for each row 级触发器,
就可以每插一次,触发一次。
create or replace trigger my_tri
before insert on yourtable
for each row
begin
insert into anothertable values(:new.yourid);
end;
如果一条语句插入多行,
那么上面的触发器能够触发多次。
begin
Raiserror('增加的数据多于一行',16,1)
rollback
return
end在oracle中怎么达到类似的功能?
在Oracle中不能在语句级的触发器中访问:new和:old,
1.需要建个临时表,
create global temporary table tmp_tbl
on commit delete rows
as
select * from yourtable where 1=0;2.在行集触发器中保存数据在这个临时表中,
create or replace trigger my_tri
after insert on yourtable
for each row
begin
insert into tmp_tbl values(:new.yourid,......);
end;
3.然后在语句级触发器中看tmp_tbl中是否超过一条数据
超过则raise你的error
1 有很多触发器用到了类似的判断;
2 除了inserted外,还用到了deleted;那么,是否要创建很多临时表?、是否要建立很多行级触发器来保存临时表的数据?
3 临时表在什么时候创建
4 是否可以用一个全局变量来做计数器,用于判断插入几行
为了保证迁移的系统能够使用,也要跟着做!