我有一个触发器,用于检查新记录中引用的行的状态是“正在进行”还是“已接受”,但是,它没有按预期工作即使我确保记录的状态为“正在进行”状态,也总会引发异常。或者'接受'。
这里涉及的表格是:
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以防万一,但没有。
答案 0 :(得分:1)
这并不奇怪。
像
这样的条件WHERE x <> 'a' OR x <> 'b'
必须始终返回TRUE
,因为没有什么可以同时等于两个不同的东西(不是很多人不会尝试,但那是OT)。