1

ポジションが更新されるたびにemployeeIDを挿入するトリガーを作成しました。場合によっては、1 つのポジションに多数の従業員が関連付けられているため、トリガーですべての従業員 (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 に答える