我有一个函数可以将一些值插入到表中,但是在插入之前,我想检查一下电子邮件地址是否正确。如果没有,则中断函数并返回一个错误。是真的,继续。
case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true
then raise exception 'Incorrect email'_email是函数的参数。但这不管用。我应该使用"IF“还是其他条件?
发布于 2016-05-24 05:12:46
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';发布于 2016-05-24 02:12:36
您应该能够在plpgsql中使用这个案例。很明显,你想做的事情也可以通过if声明来完成.
case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true then
raise exception 'Incorrect email';
else
--proceed with insert
end case;https://stackoverflow.com/questions/37403229
复制相似问题