Я надеюсь, что профессор не ведет вас по пути использования автономных транзакций, что было бы отвратительным злоупотреблением автономными транзакциями в дополнение к использованию недопустимой модели данных.
В реальном мире, чтобы такие вещи работали, вам нужно
- Пакет с набором значений RID
- Триггер оператора before, который инициализирует эту коллекцию
- Триггер уровня строки, который вставляет значения: new.rid в коллекцию
- Триггер оператора after, который читает коллекцию и выпускает обновления в таблице
RECIPE_RATINGS
Очевидно, что такие вещи становятся довольно громоздкими довольно быстро, поэтому хранение избыточных данных так проблематично.
Если вам нужно было обрабатывать только вставки, и вы могли гарантировать, что все вставки будут вставками из одной строки, используя INSERT ... VALUES, вы можете запросить таблицу RECIPE_RATINGS
в своем запросе. Это не работает в реальном мире, но этого может быть достаточно в классе.
Если вы не возражаете пересчитать среднюю оценку для каждого рецепта каждый раз, когда обновляется одна строка в RECIPE_RATINGS
, что на практике может привести к катастрофическим последствиям, но может привести к небольшой набор данных - у вас может быть триггер оператора после, который выполняет коррелированное обновление для каждой строки таблицы RECIPE
.