在oracle中从触发器插入多条记录

在oracle中从触发器插入多条记录,oracle,plsql,triggers,cursor,Oracle,Plsql,Triggers,Cursor,我创建了一个触发器,每当职位更新时插入EmployeeID。 在某些情况下,一个职位上有许多员工,因此触发器无法仅插入1名员工。我需要所有的员工身份证 有人能帮我处理这个代码吗 问候 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.perso

我创建了一个触发器,每当职位更新时插入EmployeeID。 在某些情况下,一个职位上有许多员工,因此触发器无法仅插入1名员工。我需要所有的员工身份证

有人能帮我处理这个代码吗

问候

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;

触发器!=应用程序代码

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


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

触发器!=应用程序代码

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


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

要插入多行,您需要一个循环或某种形式的插入。。。SELECT语句

例如


要插入多行,您需要循环或某种形式的插入。。。SELECT语句

例如


您需要一个循环或某种形式的插入。。。SELECT语句。ROWNUM是SQL中的一个关键字:这会使您的代码变得不标准,因此容易混淆,因为查询中的ROWNUM没有其预期的行为。@VincentMalgrat在本例中,ROWNUM是一个变量。。。不是keyword@ShoeLace通常,使用与非常常见的标准SQL函数同名的变量是一个坏主意。这是一种语言形式,这会使人类读者感到困惑。好的代码应该是人和机器都能读的。同意。。我只是想指出,在这种情况下,它并没有引起问题,你要么需要一个循环,要么需要某种形式的插入。。。SELECT语句。ROWNUM是SQL中的一个关键字:这会使您的代码变得不标准,因此容易混淆,因为查询中的ROWNUM没有其预期的行为。@VincentMalgrat在本例中,ROWNUM是一个变量。。。不是keyword@ShoeLace通常,使用与非常常见的标准SQL函数同名的变量是一个坏主意。这是一种语言形式,这会使人类读者感到困惑。好的代码应该是人和机器都能读的。同意。。我只是想指出,在这种情况下,它并没有引起问题
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;