【问题标题】:Create an after trigger that updates a column in another table (SQLplus)创建更新另一个表中的列的后触发器(SQLplus)
【发布时间】:2014-04-21 18:22:26
【问题描述】:

每当Order_line 表中描述来自Order_call 表的类型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 表,其中包含每个可用产品的数量,Order_call 表注册 orderID 及其类型(类型 2 表示它是实际销售)和 @ 987654326@ 表,其中详细说明了实际订单。它在行上存储 orderIDpart_no已售数量。因此,对于Order_Call 表中类型 2 的每个 orderID,我需要获取每个已售产品的数量(来自 Order_Line)并从相应 部分的数量中减去_没有Product表中。

我收到以下编译错误:

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

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

【问题讨论】:

  • @ 用于 SQL-Server T-SQL。我建议你阅读一些 Oracle 文档。

标签: oracle11g sqlplus


【解决方案1】:

我终于弄到了,如果以后有人需要的话:

  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;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2020-08-23
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多