Oracle Trigger问题

时间:2013-12-06 21:24:37

标签: sql oracle triggers

我不确定我是否应该将此作为我现有问题的编辑,但我决定反对它,因为这是一个不同的问题。触发器处理两个表:用户{id,name,status}产品{id,title,price,userid,status};

我希望当用户表更新时,条目的状态更改为2,用户所做的所有产品将更改为i(用于非活动状态)

CREATE OR REPLACE TRIGGER update_offering_status
      BEFORE UPDATE ON users
 FOR EACH ROW
WHEN (new.status = 'i')
BEGIN
     UPDATE offering
     SET status = 'i'
    WHERE userid = offering.userid;
END; 

问题是它正在将所有提供状态更改为i。

我认为问题是

WHERE userid = offering.userid;

如果产品的用户标识与正在更新的用户的用户标识匹配,则标记为非活动状态。我不知道如何编写代码。

1 个答案:

答案 0 :(得分:2)

你应该这样做:

CREATE OR REPLACE TRIGGER update_offering_status BEFORE UPDATE ON users
 FOR EACH ROW
WHEN (NEW.status = 'i')
BEGIN
     UPDATE offering
     SET status = 'i'
    WHERE userid = :NEW.id
END; 

您没有特定地引用任何用户。您正在更新所有行,因为userid = offering.userid与执行offering.userid = offering.userid相同,而且总是如此。