Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用多个表的SQL触发器_Sql_Oracle_Triggers_Sqltools - Fatal编程技术网

调用多个表的SQL触发器

调用多个表的SQL触发器,sql,oracle,triggers,sqltools,Sql,Oracle,Triggers,Sqltools,我正在使用SQL工具为Oracle创建一个行级触发器。我将附上我正在工作的ERD的照片。我还将包括我的指令,粘贴我尝试过的代码,以及我得到的错误 请求说明: 在已用表上创建一个名为“TRG_USED_COST”的行级触发器。触发器应该在表中插入新行之前执行。insert命令将为添加到表中的“化学数量”、“作业数量”和“已用数量”提供一个值。使用插入中使用的化学数值,从化学表中检索“化学单位成本”。将化学品单位成本乘以此行中使用的化学品数量,并将该值作为插入行的“已使用费用”包含在内 我的代码:

我正在使用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的图片