调用多个表的SQL触发器
我正在使用SQL工具为Oracle创建一个行级触发器。我将附上我正在工作的ERD的照片。我还将包括我的指令,粘贴我尝试过的代码,以及我得到的错误 请求说明: 在已用表上创建一个名为“TRG_USED_COST”的行级触发器。触发器应该在表中插入新行之前执行。insert命令将为添加到表中的“化学数量”、“作业数量”和“已用数量”提供一个值。使用插入中使用的化学数值,从化学表中检索“化学单位成本”。将化学品单位成本乘以此行中使用的化学品数量,并将该值作为插入行的“已使用费用”包含在内 我的代码:调用多个表的SQL触发器,sql,oracle,triggers,sqltools,Sql,Oracle,Triggers,Sqltools,我正在使用SQL工具为Oracle创建一个行级触发器。我将附上我正在工作的ERD的照片。我还将包括我的指令,粘贴我尝试过的代码,以及我得到的错误 请求说明: 在已用表上创建一个名为“TRG_USED_COST”的行级触发器。触发器应该在表中插入新行之前执行。insert命令将为添加到表中的“化学数量”、“作业数量”和“已用数量”提供一个值。使用插入中使用的化学数值,从化学表中检索“化学单位成本”。将化学品单位成本乘以此行中使用的化学品数量,并将该值作为插入行的“已使用费用”包含在内 我的代码:
CREATE OR REPLACE TRIGGER TRG_USED_COST
BEFORE INSERT OR UPDATE OF CHEM_NUM,JOB_NUM,USED_QTY ON USED
FOR EACH ROW
BEGIN
UPDATE USED
SET USED_CHARGE = CHEM_UNIT_COST * USED_QTY
WHERE CHEM_NUM IS NOT NULL;
END;
/
输入代码后,我收到错误:
PL/SQL:ORA-00904:“化学单位成本”:无效标识符
我知道我得到了错误,因为我没有引用“化学单位成本”所在的化学表……但我不知道如何引用它。这里有几个问题。首先,在这种情况下不“更新”目标表。在触发器上使用:new属性。然后从另一个表中选择成本
CREATE OR REPLACE TRIGGER TRG_USED_COST
BEFORE INSERT OR UPDATE OF CHEM_NUM,JOB_NUM,USED_QTY ON USED
FOR EACH ROW
DECLARE
v_cost CHEMICAL.CHEM_UNIT_COST%TYPE;
BEGIN
SELECT CHEM_UNIT_COST
INTO v_cost
FROM CHEMICAL
WHERE CHEM_NUM = :new.CHEM_NUM;
:new.USED_CHARGE := v_cost * :new.USED_QTY;
END;
/
链接到ERD的图片