Функция триггера всегда вызывает исключение при проверке, не равны ли значения запросу выбора - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть триггер, который проверяет, имеет ли статус строки, на которую ссылается новая запись, «В ПРОЦЕССЕ» или «ПРИНЯТ», однако он работает не так, как ожидалось, и всегда вызывает исключение, даже когда я проверяю, чтозапись имеет статус «IN PROGRESS» или «ACCEPTED».

Вот таблицы:

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 голосов
/ 25 апреля 2018

Это неудивительно.

Условие типа

WHERE x <> 'a' OR x <> 'b'

всегда должно возвращать TRUE, потому что ничто не может быть равным двум разным вещам одновременно (не так много людей не будут пытаться, но это ОТ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...