gpt4 book ai didi

oracle - PL/SQL 更新触发器更新所有行

转载 作者:行者123 更新时间:2023-12-05 04:14:56 25 4
gpt4 key购买 nike

刚开始使用 PL/SQL 并尝试创建一个语句级触发器,当产品数量 (p_qoh) 小于 10 或小于产品最小值的两倍时,它将“重新订购”值更改为"is" (p_min)。如果不是这种情况,则将“重新订购”值更改为“否”。我的问题是,当我对特定产品执行更新时,它会更改所有行的重新排序值,而不是我指定的行。似乎无法弄清楚我哪里出错了,我想我已经盯着它看了太久了,非常感谢任何帮助。

CREATE OR REPLACE TRIGGER TRG_AlterProd
AFTER INSERT OR UPDATE OF p_qoh, p_min ON product
DECLARE
v_p_min product.p_min%type;
v_p_qoh product.p_qoh%type;
CURSOR v_cursor IS SELECT p_min, p_qoh FROM product;
BEGIN
OPEN v_cursor;
LOOP
FETCH v_cursor INTO v_p_min, v_p_qoh;
EXIT WHEN v_cursor%NOTFOUND;
IF v_p_qoh < (v_p_min * 2) OR v_p_qoh < 10 THEN
UPDATE product SET p_reorder = 'Yes';
ELSE
UPDATE product SET p_reorder = 'No';
END IF;
END LOOP;
END;
/

最佳答案

更新命令:

UPDATE product SET p_reorder = 'Yes';

更新所有行,因为您没有指定 WHERE 子句。您可以做的是使用光标检索产品的 ID (product_id) 并保存它,以便您可以这样使用它:

UPDATE product SET p_reorder = 'Yes' WHERE id = product_id;

关于oracle - PL/SQL 更新触发器更新所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33570367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com