0

我正在使用 SQL 工具为 Oracle 创建一个行级触发器。我将附上我正在处理的 ERD 的图片。我还将包括我的说明,粘贴我尝试过的代码以及我遇到的错误。

请求描述:在USED表上创建一个名为“TRG_USED_COST”的行级触发器。触发器应在表中插入新行之前执行。插入命令将为要添加到表中的“CHEM_NUM”、“JOB_NUM”和“USED_QTY”提供一个值。使用插入中使用的 CHEM_NUM,从 CHEMICAL 表中检索“CHEM_UNIT_COST”。将化学品单位成本乘以该行中使用的化学品数量,并将该值包含为插入行的“USED_CHARGE”。

我的代码:

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: "CHEM_UNIT_COST": invalid identifier

我知道我收到了错误,因为我没有引用“CHEM_UNIT_COST”所在的 CHEMICAL 表……但我不知道如何引用它。

4

1 回答 1

0

你在这里有几个问题。首先,在这种情况下,您不会“更新”目标表。在触发器上使用 :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;
/
于 2014-05-05T17:56:40.293 回答