تعمل الدالة Trigger دائمًا على زيادة الاستثناء عند التحقق مما إذا كانت القيم لا تساوي استعلام التحديد

لدي مشغل يقوم بالتحقق مما إذا كانت حالة الصف المشار إليه في السجل الجديد هي إما "IN PROGRESS" أو "ACCEPTED" ، إلا أنها لا تعمل كما هو متوقع وتثير دائماً استثناء حتى عندما أتأكد من أن السجل يحتوي على حالة "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 في حالة حدوث أي فرق ، لم يحدث ذلك.

0

1 إجابة

هذا غير مفاجئ

حالة مثل

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

يجب دائمًا إرجاع TRUE ، لأنه لا شيء يمكن أن يساوي شيئين مختلفين في وقت واحد (ليس أن الكثير من الناس لن يجربوه ، ولكن هذا هو OT).

0
وأضاف