Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Теоретические аспекты и практические реализации создания, внедрения и использования баз данных, СУБД, хранилищ.
  • Страница:
  • 1
  • 2

ТЕМА:

Oracle. При удалении элементы в дереве - ORA-04091 12 года 9 мес. назад #2361

Нужно удалять элемент в дереве, имеется триггер
create trigger OSECTION_DELETE BEFORE DELETE on osection for each row

begin

    delete from oslist

    where oslist.os_id = :old.os_id;

    delete from osection

    where osection.os_parent = :old.os_id;

end;
при попытке удалить выдает следующую ошибку:
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.
Кто-нибудь может помочь?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. При удалении элементы в дереве - ORA-04091 12 года 9 мес. назад #2362

Нельзя в триггере управляющем объектом вновь управлять этим же объектом. Триггер просто пытается запуститься еще раз и т.д.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. При удалении элементы в дереве - ORA-04091 12 года 9 мес. назад #2363

Этого-то и хотелось достичь, дабы удалить всех потомков каскадом....
То есть с помощью триггера сделать это невозможно?
А если создать рекурсивную функцию?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. При удалении элементы в дереве - ORA-04091 12 года 9 мес. назад #2364

ORA-04091 table string.string is mutating, trigger/function may not see it


Это очень известное ограничение - нельзя в теле триггера (row trigger или statement trigger с delete cascade опцией для связанных таблиц) пытаться изменить эту же таблицу.
Oracle8i Application Developer's Guide - Fundamentals
Release 2 (8.1.6)
Part Number A76939-01

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. При удалении элементы в дереве - ORA-04091 12 года 9 мес. назад #2365

там и нашел.
с триггером я все понял, а все-таки, рекурсивная функция будет жить/работать или имеет смысл биться другим способом?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle. При удалении элементы в дереве - ORA-04091 12 года 9 мес. назад #2366

сделай лучше так
alter table osection add constaint osection_connstraint foreign key (os_parent) references osection (os_id) on delete cascade

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.233 секунд