|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
Нужно удалять элемент в дереве, имеется триггер Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
при попытке удалить выдает следующую ошибку: 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. Кто-нибудь может помочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:08 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
Нельзя в триггере управляющем объектом вновь управлять этим же объектом. Триггер просто пытается запуститься еще раз и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:20 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
Этого-то и хотелось достичь, дабы удалить всех потомков каскадом.... То есть с помощью триггера сделать это невозможно? А если создать рекурсивную функцию? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:25 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
>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 12 Using Triggers ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:30 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
>.dba там и нашел. с триггером я все понял, а все-таки, рекурсивная функция будет жить/работать или имеет смысл биться другим способом? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:33 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
сделай лучше так alter table osection add constaint osection_connstraint foreign key (os_parent) references osection (os_id) on delete cascade ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:35 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
Этот триггер уже срабатывает на удаление из OSECTION Зачем тебе еще раз из нее удаление? Для каскадного удаления надо установить constraint on cascade delete для подчиненных таблиц. При удалении из основной удалятся все записи которые ссылаются на данную. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:48 |
|
Help ORA-04091 !
|
|||
---|---|---|---|
#18+
Всем спасибо за ответы, особенно nick, он не первый раз меня выручает :) действительно помогло. >MW Дело в том что в этой таблице хранится дерево, то есть хотелось чтобы при удалении корня удалялось не только содержимое подчиненной таблицы но и все узлы в ЭТОЙ ЖЕ таблице, которые ссылаются на этот корень ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2002, 13:52 |
|
|
start [/forum/topic.php?fid=52&gotonew=1&tid=1993169]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
14ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 306ms |
total: | 453ms |
0 / 0 |