2012-05-24 79 views
1

我創建了一個觸發器,用於在更新位置時插入employeeID。 在某些情況下,有很多員工附屬於一個職位,因此觸發器無法插入所有員工(只有1個)。我需要所有員工的ID從oracle中的觸發器插入多個記錄

可以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

你要麼需要一個循環或某種形式的 「INSERT ... SELECT」 語句。 – Yahia

+1

'ROWNUM'是SQL中的一個關鍵字:這會讓你的代碼不標準(因此令人困惑),因爲你的查詢中的'rownum'沒有它的預期行爲。 –

+0

@VincentMalgrat在這個例子中,ROWNUM是一個變量...不是關鍵字 – ShoeLace

回答

5

觸發器!=應用程序代碼

如果您在觸發這樣的嵌入應用程序代碼那麼這將是可怕的維護和調試,你會總是會遇到情況下觸發基於方法將不會工作,因爲表中有一個變異錯誤。

如果只爲審計和其他非應用程序活動保留觸發器,並將這種邏輯放在應用程序本身中,您會做得更好。

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;