0

次のように、IDとNAMEの2つの列とデータを持つテーブルpractise_oneがあります。

ID名:1サミー、2バム、3マム、4パム、5ジャム、

各行のテーブルで挿入、更新、または削除の後に自律トリガーを定義しました。

8 より大きく、practise_one テーブルに挿入されるすべての ID をフィルターで除外して (テーブルに挿入しないように) したいのですが、8 未満の ID のみをテーブルに挿入できます。8 より大きいすべての ID は、別のテーブル practise_one_log に挿入する必要があります。

トリガーの私のアプローチ:

create or replace trigger tr_practise_one 
after insert or update or delete on practise_one
for each row
Declare
  pragma autonomous_transaction;
  id_greater exception;
  id_one number(10);
begin
  if (:new.id>8) then
   rollback;
   raise id_greater;
  end if;
exception 
  when id_greater then
  insert into practise_one_log values('The Id is greater '||:new.id);
  commit;
end tr_practise_one;

私がする時 :

insert into practise_one values (9,'oam');

それぞれの行を「practise_one_log」テーブルに入れることはできますが、行がpractise_oneテーブルに入るのを止めることはできません。

Resultant Output:

  ID    name :
  1 sammy,
  2 vam,
  3 mam,
  4 pam,
  5 jam,
  9     oam

Expected Output

  ID    name :
  1 sammy,
  2 vam,
  3 mam,
  4 pam,
  5 jam
4

1 に答える 1

0

BEFORE トリガーまたは INSTEAD OF を使用できます。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm

于 2013-10-29T07:35:54.483 に答える