Я уже некоторое время пытаюсь реализовать этот триггер и делаю успехи (я думаю!), но теперь я получаю ошибку мутации.
Здесь у меня есть три объекта (которые здесь имеют отношение): Customer_Order (всего и т. д.), Order_Line (количество, промежуточный итог и т. д.) и Products (запас, цена). Order_line — это связующая сущность, поэтому продукт может находиться во многих order_lines, а customer_order может иметь много order_lines, но order_line может появляться в заказе только один раз и может содержать только один продукт. Цель триггера состоит в том, чтобы взять промежуточный итог из order_line (или цену из продуктов, я думаю, на самом деле) и количество из order_line, умножить их и обновить промежуточный итог нового order_line.
Итак, я вставляю order_line с внешним ключом моего продукта, количеством 3 и ценой 4,00, триггер умножает два, чтобы получить 12, и обновляет промежуточный итог. Теперь я думаю, что правильно использовать здесь цену вместо подытога Order_line, чтобы исправить ошибку мутации (которая возникает из-за того, что я прошу триггер обновить таблицу, к которой обращается триггерный оператор, верно?), но как исправить проблему с количеством? Количество не всегда будет таким же, как на складе, оно должно быть меньше или равно запасу, так что кто-нибудь знает, как я могу исправить это, чтобы выбрать из продукта и обновить order_line? Спасибо.
CREATE OR REPLACE TRIGGER create_subtotal
BEFORE INSERT OR UPDATE ON Order_Line
for each row
DECLARE
currentSubTotal order_line.subtotal%type;
currentQuantity order_line.quantity%type;
BEGIN
select order_line.subtotal,order_line.quantity
into currentSubTotal,currentQuantity
from order_line
where product_no = :new.product_no;
IF (currentquantity>-1 ) then
update order_line set subtotal= currentSubTotal * currentQuantity where line_no=:new.line_no;
END IF;
END;
.
run
РЕДАКТИРОВАТЬ: я думаю, что мог бы использовать синтаксис :new для использования значения количества из оператора триггера. Я попробую это, но я был бы признателен за подтверждение и помощь, спасибо.