Я уже некоторое время пытаюсь реализовать этот триггер и делаю успехи (я думаю!), Но сейчас я получаю ошибку мутации.
Здесь у меня есть три объекта (которые здесь актуальны), 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
РЕДАКТИРОВАТЬ: Я думаю, что я мог бы использовать синтаксис: новый, чтобы использовать значение количества из оператора запуска.Я попробую это, но я буду благодарен за подтверждение и помощь, спасибо.