我有一个函数可以在表中插入一些值,但在插入之前我想检查电子邮件地址是否正确。如果没有,请中断该函数并返回错误。情况属实,继续。
case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true
then raise exception 'Incorrect email'
_email是funcion的参数。 但它不起作用。我应该使用“IF”还是其他条件?
答案 0 :(得分:3)
CASE
有效,但IF
似乎更合适
你在表达式中有一些毫无意义的噪音,我认为你的逻辑是倒退的:如果_email
与匹配,那么应该触发“不正确的电子邮件”:
IF _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' -- drop the pointless "= true"
THEN -- do nothing - I inverted the logic
ELSE RAISE EXCEPTION 'Incorrect email';
END IF;
新的ASSERT
(Postgres 9.5+)也可以使用,但这真的是用于调试:
ASSERT _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$', 'Incorrect email';
答案 1 :(得分:0)
你应该能够在plpgsql中使用这个案例。显然你要做的事情也可以通过if语句来完成......
case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true then
raise exception 'Incorrect email';
else
--proceed with insert
end case;