Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Trigger mutation  [new]
Igor MV
Member

Откуда:
Сообщений: 106
Здравствуйте

есть триггер

create or replace trigger TRG_TABLEX_B_I
  before insert on TABLEX
  for each row
declare
  ln_cnt number; 
begin
   if :new.pay_type=3 then
      select count(*) into ln_cnt
	 from TABLEX
	    where details=:new.details;
      if ln_cnt>1 then
	 raise NO_DATA_FOUND;
      end if;
  end if;
end TRG_TABLEX_B_I;

но откуда тут взяться ошибки Trigger mutation ?
20 мар 08, 07:51    [5433601]     Ответить | Цитировать Сообщить модератору
 Re: Trigger mutation  [new]
Elic
Member

Откуда:
Сообщений: 29990
Igor MV
но откуда тут взяться ошибки Trigger mutation ?
insert select
20 мар 08, 08:21    [5433640]     Ответить | Цитировать Сообщить модератору
 Re: Trigger mutation  [new]
Igor MV
Member

Откуда:
Сообщений: 106
Elic
insert select


да
insert
select
from dual;
20 мар 08, 08:30    [5433656]     Ответить | Цитировать Сообщить модератору
 Re: Trigger mutation  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
ORA-04091 table string.string is mutating, trigger/function may not see it


Cause: A trigger (or a user defined PL/SQL function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.

Action: Rewrite the trigger (or function) so it does not read that table.


Вроде, всё английским по-понятному написано... :)
20 мар 08, 19:16    [5438808]     Ответить | Цитировать Сообщить модератору
 Re: Trigger mutation  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
off

вообще, автор - творчески незауряден:
ить я бы - никогда не придумал, что NO_DATA_FOUND это тогда, когда чёто есть и его (чёты) много
20 мар 08, 19:31    [5438845]     Ответить | Цитировать Сообщить модератору
 Re: Trigger mutation  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Igor MV
есть триггер


Just get rid of your trigger and add unique FBI:

CREATE UNIQUE INDEX TABLEX_UIDX1
  ON TABLEX(
            CASE pay_type
              WHEN 3 THEN details
              ELSE NULL
            END
           )
/

SY.
21 мар 08, 15:19    [5442559]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить