【发布时间】:2020-04-07 07:54:32
【问题描述】:
我正在尝试在一个表上编写一个触发器,该触发器在库存数量 = 0 时触发。然后它将使用 product_id 和 store_id 在另一个表中添加一行,以指示需要评估该项目以进行重新订购。经过4个多小时的搜索和尝试,我在这里注册了一个帐户。我是新用户,这可能会完全关闭。
这是我最近的尝试:
CREATE OR REPLACE TRIGGER ORDERS_AFTER_UPDATE
AFTER UPDATE
OF QUANTITY_STOCK
ON INVENTORY
FOR EACH ROW
WHEN (NEW.QUANTITY_STOCK - OLD.QUANTITY_STOCK = 0)
BEGIN
SELECT PRODUCT_ID, STORE_ID
INTO PURCHASE_NEW
FROM INVENTORY
WHERE QUANTITY_STOCK = 0;
END;
相关表是 INVENTORY,具有 PRODUCT_ID、STORE_ID,以及 QUANTITY_STOCK 和 PURCHASE_NEW,具有 PRODUCT_ID 和 STORE_ID。我希望它在 QUANTITY_STOCK = 0 的值时将 PRODUCT_ID 和 STORE_ID 从 INVENTORY 表中复制到 PURCHASE_NEW 表中。
我收到的错误是:
Error(8,1): PL/SQL: SQL Statement ignored
Error(9,6): PLS-00403: expression 'PURCHASE_NEW' cannot be used as an INTO-target of a SELECT/FETCH statement
Error(9,19): PL/SQL: ORA-00904: : invalid identifier
非常感谢。
【问题讨论】:
-
SQL 看起来很准。万一,
PURCHASE_NEW可以在另一个数据库或服务器中吗? -
SELECT ... INTO是将查询的结果值放入 PL/SQL 变量的 PL/SQL 命令。如果要在表中插入一行,请改用 SQL 的INSERT。NEW.QUANTITY_STOCK - OLD.QUANTITY_STOCK = 0与NEW.QUANTITY_STOCK = OLD.QUANTITY_STOCK相同,即没有变化。
标签: sql oracle sql-insert database-trigger