таблица ESPUMA.ORDER_DETAILS мутирует, триггер / функция может ее не видеть - PullRequest
0 голосов
/ 01 мая 2018

У меня есть 3 таблицы со следующими столбцами:

PRODUCTS(product_id,image, name,price,create_date) ORDERS(order_id,amount,customerAddress,email,customerName,phone,orderDate,orderNum)
ORDER_DETAILS(id,amount,price,quantity,order_id,product_id)

Я создал новую таблицу с именем PRODUCTS_SOLD(product_id, quantity) и триггер с именем PRODUCTS_TRIGGER, поэтому после каждой вставки в ORDER_DETAILS product_id и количество каждого продукта будут вставляться в таблицу PRODUCTS_SOLD.

Это триггер:

CREATE OR REPLACE TRIGGER PRODUCTS_TRIGGER 
AFTER INSERT ON ORDER_DETAILS 
FOR EACH ROW 
  DECLARE
  ID order_details.product_id%type := :NEW.PRODUCT_ID; 
  product_quantity number;
BEGIN
  SELECT SUM(quantity) INTO product_quantity FROM ORDER_DETAILS 
  WHERE product_id = ID;
  INSERT INTO PRODUCTS_SOLD VALUES(ID,product_quantity);
END;

Показывает эту ошибку:

ORA-04091: table ESPUMA.ORDER_DETAILS is mutating, trigger/function may not see it 

Что я могу сделать, чтобы решить это?

1 Ответ

0 голосов
/ 02 мая 2018

Просто конвертируйте ваш триггер в BEFORE INSERT из AFTER INSERT.

Поскольку он борется с определением суммы количества с помощью :NEW.PRODUCT_ID таблицы ORDER_DETAILS во время операции DML для той же таблицы.

...