Oracle 表ESPUMA.ORDER\u详细信息正在变化,触发器/函数可能看不到它
我有3个表,其中包含以下列:Oracle 表ESPUMA.ORDER\u详细信息正在变化,触发器/函数可能看不到它,oracle,triggers,database-trigger,Oracle,Triggers,Database Trigger,我有3个表,其中包含以下列: 产品(产品id、图像、名称、价格、创建日期)订单(订单id、金额、客户地址、电子邮件、客户姓名、电话、订单日期、订单编号) 订单详细信息(id、金额、价格、数量、订单id、产品id) 我创建了一个名为PRODUCTS\u salled(product\u id,quantity)的新表和一个名为PRODUCTS\u trigger的触发器,因此每次插入ORDER\u DETAILS后,每个产品的产品id和数量都将插入表PRODUCTS\u salled 这是触发因素
产品(产品id、图像、名称、价格、创建日期)
订单(订单id、金额、客户地址、电子邮件、客户姓名、电话、订单日期、订单编号)
订单详细信息(id、金额、价格、数量、订单id、产品id)
我创建了一个名为PRODUCTS\u salled(product\u id,quantity)
的新表和一个名为PRODUCTS\u trigger
的触发器,因此每次插入ORDER\u DETAILS
后,每个产品的产品id和数量都将插入表PRODUCTS\u salled
这是触发因素:
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
我能做些什么来解决它
只需将触发器从插入后的转换为插入前的
因为在同一个表的DML操作期间,它正在努力通过:新的.PRODUCT\u ID
的ORDER\u DETAILS
表来确定数量之和