我创建了一个触发器,可以在更新位置时插入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;
答案 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;