创建更新另一个表中的列的后触发器(SQLplus)

时间:2014-04-21 00:46:03

标签: oracle11g sqlplus

我需要创建一个触发器,只要在Order_call表中描述Order_line表中的类型2的顺序,就会更新Product表中的数量。 我尝试过以下触发器,但我一直遇到错误:

CREATE OR REPLACE TRIGGER updqty AFTER INSERT OR UPDATE ON ORDER_LINE FOR EACH ROW 
DECLARE
ortype NUMBER(1);
BEGIN 
SELECT @ortype=type FROM ORDER_CALL WHERE orderID=NEW.orderID;
    IF (ortype=2) THEN
    UPDATE PRODUCT SET qty = qty - NEW.qty WHERE part_no=NEW.part_no;
END IF;
END;

我的Products表包含每个可用产品的数量,注册 orderID Order_call表及其类型(类型2表示它'一个实际的销售)和Order_Line表,其中详细说明了实际的订单。它在行上存储 orderID 部分 _ ,以及销售数量。因此,对于Order_Call表格中每个类型2的 orderID ,我需要获取每个销售产品的数量(来自Order_Line)并从相应的数量中减去它Product表格中的部分 _

我收到以下编译错误:

4/2  PL/SQL: SQL Statement ignored
4/19 PL/SQL: ORA-00936: missing expression

我没有太多 SQL 经验。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我终于设法得到它,如果其他人以后需要这个:

  CREATE OR REPLACE TRIGGER updqty
   BEFORE INSERT OR UPDATE
   ON ORDER_LINE
   FOR EACH ROW
DECLARE
   ortype   NUMBER (5);
BEGIN
   SELECT TYPE
     INTO ortype
     FROM ORDER_CALL
    WHERE order_call.orderID = :NEW.orderID;

   IF (ortype = 2)
   THEN
      UPDATE PRODUCT
         SET qty = qty - :NEW.qty
       WHERE part_no = :NEW.part_no;
   END IF;
END;
/