1

我创建了一个触发器,以便在更新职位时插入员工 ID。在某些情况下,一个职位有很多员工,因此触发器无法插入所有员工(只有 1 个)。我需要所有员工 ID

任何人都可以帮我处理这段代码吗?

问候

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;
4

2 回答 2

5

触发器!= 应用程序代码

如果您像这样将应用程序代码嵌入到触发器中,那么维护和调试将非常糟糕,并且您将始终遇到基于触发器的方法由于变异表错误而无法工作的情况。

您最好只为审计和其他非应用程序活动保留触发器,并将这种逻辑放在应用程序本身中。

于 2012-05-24T12:53:47.660 回答
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;

或者

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;
于 2016-05-16T14:47:03.213 回答