Ошибка ORA-01403 в Package при отработке триггера на update

senyOr
Дата: 13.11.2008 12:32:10
Итак ситуация,

Имеются две таблицы
А:
id_a
price
status_a
d_off (деактуализация записи)

и

Б:
id_b
status_b

При изменениях (update, insert, delete) в таблице А - происходят изменения (update) в таблице Б.
Работает Package В, который вызывается тригером Д!
В Package есть процедура, которая делает SELECT т.е. выбирает из таблицы А сумму статусов... SUMM(STATUS_A) ..., c условием D_OFF is null, а затем в зависимости от суммы статусов делает UPDATE поля STATUS_B таблицы Б.

Итак, есть обычный update, который никак не связан с выше указанными процами, тригерами и т.д. Он просто делает Update полю D_OFF = sysdate! Вот тут и появляется ошибка! ORA-01403 - нет данных! И ругается на триггег и пакет! Как я понимаю, мы не можем выбирать запись, которую обновляем! А точнее, мы не можем указывать условие WHERE D_OFF IS NULL одновременно присваивая записи D_OFF = sysdate!
Так у меня вопрос: как мне обойти эту ситуацию? Мне необходимо, чтобы триггер выполнялся! Все работает если закоментить условие WHERE D_OFF IS NULL... но это условие мне просто необходимо!

Заранее спасибо.
andrey_anonymous
Дата: 13.11.2008 12:48:09
Сделайте view (или mview).
1403 возникает исключительно в случае работы по select INTO, когда этот into не возвращает записей.
Написать такой триггер возможно, но для этого надо много лучше владеть инструментом.
Самое смешное, что если Вы таки разберетесь в том, как это сделать, то само желание написать такой триггер Вас оставит в покое, поскольку для этой задачи есть более подходящие средства ;)
senyOr
Дата: 13.11.2008 12:57:06
Хм. В, принципе, знаком нормально. Но еще в начинающих.
Посему, объясните плз, что такое mview и как с ним бороться?
Спасибо.
alecsey
Дата: 13.11.2008 12:59:06
страно логичнее было бы ожидать ошибку мутации
senyOr
Дата: 13.11.2008 13:06:26
Скорее всего так и было.
Решил проблему - поставил 'FOR EACH ROW' в тригере.
Ошибки больше не возникало.
Всем спасибо.