Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки? / 25 сообщений из 28, страница 1 из 2
19.11.2017, 01:03
    #39555597
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Почему вызывает ошибку триггер after insert on each row после вставки вида insert into.. select - понятно: оператор в теле триггера может не обработать строки (если, конечно, по условию их нужно будет обработать), которые еще не вставлены в таблицу, т.е. таблица находится в рассогласованном состоянии. Но почему ошибка вызывается после insert into.. values, когда понятно, что была вставлена всего одна строка и таблица к моменту срабатывания триггера находится уже в согласованном состоянии - неясно.
...
Рейтинг: 0 / 0
19.11.2017, 07:28
    #39555616
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Glashutteтаблица к моменту срабатывания триггера находится уже в согласованном состоянииТебе только кажется.
Сточный триггер не должен зависеть от изменений, произведённых вызвавшей его командой. Этому удовлетворяет только before insert.
А вообще лучше всего исходить из того, что мутирует всегда. Потому что даже before insert values мутирует в определённых случаях.
...
Рейтинг: 0 / 0
19.11.2017, 14:31
    #39555683
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Поясните Вашу мысль. Что значит "кажется"? В таблицу была вставлена одна строка - больше ничего.
...
Рейтинг: 0 / 0
19.11.2017, 14:53
    #39555686
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Вы предлагаете Oracle написать разные виды строчных триггеров - для одной строки и не для одной?
Для вашего случая есть триггер after statement.
...
Рейтинг: 0 / 0
19.11.2017, 15:25
    #39555707
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Триггер Before Insert - давно анализирует эти два случая. Он не вызывает ошибку мутации при однострочной вставке.
...
Рейтинг: 0 / 0
19.11.2017, 16:54
    #39555732
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteТриггер Before Insert - давно анализирует эти два случая. Он не вызывает ошибку мутации при однострочной вставке.

Не совсем. Это ты знаешь твой insert вставит 1 строку. Oracle понятия не имеет. Посему он базирует решение исходя из INSERT VALUES или INSERT SELECT. В первом случае Oracle точно знает - вставка одной строки и посему DML на triggering table в BEFORE ROW триггер не даст "table is mutating". При INSERT SELECT BEFORE ROW триггер даст "table is mutating" независимо от числа вставляемых строк ибо Oracle заранее не знает 1 строка или нет. А вот в AFTER ROW триггере 1 строка или много значения не имеет ведь изменение на уровне строк уже есть а на уровне таблицы еще в процессе.

SY.
...
Рейтинг: 0 / 0
20.11.2017, 01:51
    #39555883
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
То есть отследить то, что проводилась операция insert into..values в before insert - можно, а в after insert - уже нельзя?
...
Рейтинг: 0 / 0
20.11.2017, 07:23
    #39555913
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteТо есть отследить то, что проводилась операция insert into..values в before insert - можно, а в after insert - уже нельзя?Нельзя же быть настолько …упертым.
...
Рейтинг: 0 / 0
20.11.2017, 09:15
    #39555947
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Я думаю, что, если ты не владеешь темой - можно просто промолчать, а не пытаться вставить пять копеек непонятно зачем :)
...
Рейтинг: 0 / 0
20.11.2017, 09:42
    #39555959
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteЯ думаю, что, если ты не владеешь темой - можно просто промолчать, а не пытаться вставить пять копеек непонятно зачем :)Ламер, не воинствуй в своих упрямых надеждах.
...
Рейтинг: 0 / 0
20.11.2017, 09:48
    #39555963
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
У некоторых и insert into .. values мутирует.. в некоторых случаях ;) Только в Oracle об этом не знают )
...
Рейтинг: 0 / 0
20.11.2017, 09:51
    #39555966
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteУ некоторых и insert into .. values мутирует.. в некоторых случаях ;) Только в Oracle об этом не знают )Они-то знают, а вот ты свои "знания" напрасно выпячиваешь.
...
Рейтинг: 0 / 0
20.11.2017, 10:31
    #39555981
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Если я чего-то не знаю или недопонимаю, то я - спрашиваю. Я знаю, что на этом форуме - сразу начинается кудахтанье на тему "ты дурак" или "читай доки". Мнение таких - меня мало интересует, я бы таких на советскую банку из-под майонеза сажал, чтобы впредь неповадно кукарекать было, когда серьезные вопросы обсуждаются.
...
Рейтинг: 0 / 0
20.11.2017, 10:45
    #39555986
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteТо есть отследить то, что проводилась операция insert into..values в before insert - можно, а в after insert - уже нельзя?
конечно можно, но проверять то и не надо

у меня чуть другая версия

в before состояние таблички известно, она чистая - еще не изменена оператором,
а в after уже внесены изменения и "неизвестно" как представить результат напр чтения вот она и мутирует

можно было БЫ в after в любом случае плевать на мутацию, но имеем что имеем

.....
stax
...
Рейтинг: 0 / 0
20.11.2017, 10:58
    #39555993
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Stax, вот я так же подумал - что у нее простааляется признак "таблица изменена", а дальше при попытке обращения из строчного триггера в нее прописано - сваливаться в ошибку, не анализируя причин изменения.
...
Рейтинг: 0 / 0
20.11.2017, 10:59
    #39555995
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteЕсли я чего-то не знаю или недопонимаю, то я - спрашиваю.Ну так ты спроси прямо, не стесняйся.
GlashutteЯ знаю, что на этом форуме - сразу начинается кудахтанье на тему "ты дурак" или "читай доки". Мнение таких - меня мало интересует,Ну тогда ты должен знать, что потрындеть - это в ПТ, а знания - в документации.
Glashutteя бы таких на советскую банку из-под майонеза сажал, чтобы впредь неповадно кукарекать было, когда серьезные вопросы обсуждаются.Сколько гонору-то. - Самовлюблённый магистр что-ли?
...
Рейтинг: 0 / 0
20.11.2017, 11:21
    #39556020
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteStax, вот я так же подумал - что у нее простааляется признак "таблица изменена", а дальше при попытке обращения из строчного триггера в нее прописано - сваливаться в ошибку, не анализируя причин изменения.
зачем анализировать причину?
изменена (в after я так понимаю, таблица не может быть не изменена) , слетаем is mutating

.....
stax
...
Рейтинг: 0 / 0
20.11.2017, 11:46
    #39556046
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Stax,
если бы можно было анализировать причину - не было бы ошибки мутации в after insert после insert into.. values (???)
Если таблица при этом может оказаться в рассогласованном состоянии - я хотел, чтобы мне объяснили это. Вместо этого я, как всегда, услышал "ты просто дурак и поэтому не понимаешь" (это относится никоим образом не к Вам).
...
Рейтинг: 0 / 0
20.11.2017, 12:16
    #39556070
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
GlashutteStax,
если бы можно было анализировать причину - не было бы ошибки мутации в after insert после insert into.. values (???)
Если таблица при этом может оказаться в рассогласованном состоянии - я хотел, чтобы мне объяснили это. Вместо этого я, как всегда, услышал "ты просто дурак и поэтому не понимаешь" (это относится никоим образом не к Вам).
лично я, например, не вижу (в большинстве случаев) причин возникновения мутации в after

все ж понятно

другое дело, что оракля считает по другому, так им жить проще

....
stax
...
Рейтинг: 0 / 0
20.11.2017, 12:57
    #39556101
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Stax,

Приятно встретить здесь адекватного человека.
...
Рейтинг: 0 / 0
20.11.2017, 20:49
    #39556393
Glashutte
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
SY,

Не могли бы Вы поподробнее рассказать насчет изменения на уровне строк и таблицы?
...
Рейтинг: 0 / 0
20.11.2017, 23:09
    #39556446
Bobby Z.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Staxлично я, например, не вижу (в большинстве случаев) причин возникновения мутации в after

все ж понятно

другое дело, что оракля считает по другому, так им жить проще
Это потому, что Вы знаете (или думаете, что знаете) логику своего приложения в каждом конкретном случае и, как правило, рассматриваете только поведение этого приложения в однопользовательском последовательном режиме: одна сессия, одна транзакция, последовательные построчные изменения. Оракл же ничего не знает ни о Вашем приложении, ни о Ваших намерениях что-то сделать в транзакции. Зато Оракл знает, что он обязан гарантировать

а) атомарность стейтментов (всё или ничего) и одновременно
б) консистентное состояние БД на протяжении всего времени выполнения стейтмента.

Поскольку BEFORE|AFTER EACH ROW триггер видит таблицу во время выполнения стейтмента, Оракл обязан гарантировать, что она не изменилась с начала выполнения стейтмента, что, в данном случае, гарантировать в принципе невозможно - в таблицу только что была вставлена одна или более строк, так что она уже не такая, как была на начало выполнения. А на начало выполнения строки там не было, так что триггер её и увидеть в принципе не может. Бум, ORA-04091. А вот AFTER STATEMENT может видеть все изменения, произведённые стейтментом, потому что он уже атомарно успешно выполнен.
...
Рейтинг: 0 / 0
20.11.2017, 23:23
    #39556456
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Glashutte Не могли бы Вы поподробнее рассказать насчет изменения на уровне строк и таблицы?

SQL оперирует над множествами а не над строками. T.e DML операция атомарная - имеем множество до DML и множество после DML а в середине черная дыра - "table is mutating".

SY.
...
Рейтинг: 0 / 0
21.11.2017, 09:37
    #39556580
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
SYGlashutte Не могли бы Вы поподробнее рассказать насчет изменения на уровне строк и таблицы?

SQL оперирует над множествами а не над строками. T.e DML операция атомарная - имеем множество до DML и множество после DML а в середине черная дыра - "table is mutating".

SY.
c insert values где черная дыра в after?

.....
stax
...
Рейтинг: 0 / 0
21.11.2017, 16:01
    #39556984
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки?
Staxc insert values где черная дыра в after?


Если по-чесноку, то before row тоже "черная дыра" даже с INSERT VALUES если есть before statement триггер который может изменить triggering table. С after "черная дыра" в том что мы не дошли еще до конца даже before row тригера и понятия не имеем что будет "after" содержимым таблицы. А в большинстве случаев необходимость дергания самого себя в тригере есть признак проблем имплементации а возможно и архитектуры.

SY.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему триггер after insert on each row вызывает ошибку мутации после единичной вставки? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]