从oracle中的触发器插入多个记录

时间:2012-05-24 12:47:11

标签: oracle plsql triggers cursor

我创建了一个触发器,可以在更新位置时插入employeeID。 在某些情况下,有许多员工连接到一个职位,因此触发器无法插入所有员工(仅1个)。我需要所有员工ID

any1可以帮助我使用这段代码吗?

此致

create or replace trigger postn_updt
after update on postn
for each row

declare 

cursor m is 
select u.login
from user u,
party_per s
where u.row_id=s.person_id 
and s.party_id=:new.row_id;

rownum varchar2(10);

begin
if updating ('postn_type_cd') then
open mult;
fetch mult into rownum;

insert into test123
(employee_number,type,request_date,remarks)
values
(( rownum,
'Updated',sysdate,''
);
close m;
end if;
end;

2 个答案:

答案 0 :(得分:5)

触发器!=应用程序代码

如果你在这样的触发器中嵌入应用程序代码,那么维护和调试将会非常糟糕,并且你总是会遇到基于触发器的方法由于表变异而发生错误的情况。

您可以更好地保留仅针对审计和其他非应用程序活动的触发器,并将此类逻辑放在应用程序本身中。

答案 1 :(得分:0)

要插入多行,您需要一个LOOP或某种形式的“INSERT ... SELECT”语句。

例如

create or replace trigger postn_updt
after update on postn
for each row

declare 

cursor m is 
select u.login
from user u,
party_per s
where u.row_id=s.person_id 
and s.party_id=:new.row_id;

begin
if updating ('postn_type_cd') then

  for mult_rec in  m LOOP

    insert into test123
    (employee_number,type,request_date,remarks)
    values
    (( mult_rec.login,
    'Updated',sysdate,''
    );
  END LOOP;

end if;
end;

OR

create or replace trigger postn_updt
after update on postn
for each row

declare 
begin
if updating ('postn_type_cd') then

    insert into test123
    (employee_number,type,request_date,remarks)
    select u.login ,'Updated',sysdate,''
    from user u,
        party_per s
    where u.row_id=s.person_id 
    and s.party_id=:new.row_id;

end if;
end;