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;

解决方案 »

  1.   

    因为for each row,所以一行触发一次
    如果一条语句插入多行,
    那么上面的触发器能够触发多次。
      

  2.   

    现在sql server中,有这么一条语句,不知道在oracle中,如何处理 if (select count(1) from inserted) > 1 
    begin
    Raiserror('增加的数据多于一行',16,1)
    rollback
    return
    end在oracle中怎么达到类似的功能?
      

  3.   

    这个问题还比较麻烦,
    在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
      

  4.   

    看了楼上的,感觉有些启发了,但还是有些问题:
    1 有很多触发器用到了类似的判断;
    2 除了inserted外,还用到了deleted;那么,是否要创建很多临时表?、是否要建立很多行级触发器来保存临时表的数据?
    3 临时表在什么时候创建
    4 是否可以用一个全局变量来做计数器,用于判断插入几行
      

  5.   

    原因很简单,原来sql server 2000的存储过程用的就是这么个判断。
    为了保证迁移的系统能够使用,也要跟着做!