Oracle11g 创建更新另一个表中的列的after触发器(SQLplus)
每当Oracle11g 创建更新另一个表中的列的after触发器(SQLplus),oracle11g,sqlplus,Oracle11g,Sqlplus,每当订单行表中描述了来自订单调用表的类型2的订单时,我需要创建一个触发器来更新产品表中的数量。 我尝试了以下触发器,但不断出现错误: 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;
订单行
表中描述了来自订单调用
表的类型2的订单时,我需要创建一个触发器来更新产品表中的数量。
我尝试了以下触发器,但不断出现错误:
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\u call
表,该表注册orderID及其类型(类型2表示实际销售)和Order\u行
表,其中详细说明了实际订单。它在行上存储订单ID、零件号和销售数量。因此,对于Order\u Call
表中类型2的每个orderID,我需要获取每个产品的销售数量(来自Order\u Line
),并将其从product
表中相应零件号的数量中减去
我收到以下编译错误:
4/2 PL/SQL: SQL Statement ignored
4/19 PL/SQL: ORA-00936: missing expression
我没有太多的SQL经验。
谢谢你的帮助 如果以后还有其他人需要这个,我终于找到了:
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;
/
@用于SQL Server T-SQL。我建议您阅读一些Oracle文档。