检查值是否与选择查询相等时,触发功能始终引发异常

时间:2018-04-25 07:53:38

标签: postgresql function triggers

我有一个触发器,用于检查新记录中引用的行的状态是“正在进行”还是“已接受”,但是,它没有按预期工作即使我确保记录的状态为“正在进行”状态,也总会引发异常。或者'接受'。

这里涉及的表格是:

Problem     | Ticket
------------+-------------
problem_id  | ticket_id
status      | problem_id


CREATE OR REPLACE FUNCTION status_check()
        RETURNS TRIGGER AS
    $BODY$
    BEGIN
        IF (SELECT status FROM customer_problem WHERE problem_id = NEW.problem_id) 
             != 'IN PROGRESS' OR 
        (SELECT status FROM customer_problem WHERE problem_id = NEW.problem_id)
             != 'ACCEPTED' 
        THEN RAISE EXCEPTION 'Problem status not IN PROGRESS or ACCEPTED';
        END IF;
        RETURN NEW;
    END
    $BODY$ LANGUAGE plpgsql;



CREATE TRIGGER check_status_bef
BEFORE INSERT ON ticket 
FOR EACH ROW
EXECUTE PROCEDURE status_check();

我也试过使用IF,IF-ELSE以防万一,但没有。

1 个答案:

答案 0 :(得分:1)

这并不奇怪。

这样的条件
WHERE x <> 'a' OR x <> 'b'

必须始终返回TRUE,因为没有什么可以同时等于两个不同的东西(不是很多人不会尝试,但那是OT)。