DO $$
BEGIN
-- Check to make sure that event starts after users created
IF EXISTS (
SELECT users.id
FROM event
INNER JOIN users ON event.user_id::INT = users.id
WHERE event.start > users.created
)
THEN
RAISE NOTICE 'SUCCESSFUL %', now();
ELSE
RAISE EXCEPTION 'ERROR on % - All Event start timestamps must be created after users are created',now();
END IF;
END $$;
此异常是为了检查时间戳,并且效果很好。但我想添加一个类似的条件,并至少添加3个例外条件。我现在想在末尾返回异常。我不希望进程在第一次检查失败时停止。我希望最后一次全部提出所有失败的测试。我怎么做 ?我了解了有关堆叠式诊断的信息,但不知道这种方法是否正确,或者是否应该使用IF-else?
答案 0 :(得分:1)
中断处理具有异常的性质,因此您不能简单地为此使用异常。
您可以将所有异常收集在一个(临时的)表中,最后将它们传达给客户端,或者将它们连接为一个大的异常。
您还可以将各个消息作为NOTICE
发出并在末尾引发异常。