在函数POSTGRESQL中的CASE-WHEN

时间:2016-05-24 02:01:20

标签: sql postgresql plpgsql

我有一个函数可以在表中插入一些值,但在插入之前我想检查电子邮件地址是否正确。如果没有,请中断该函数并返回错误。情况属实,继续。

case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true 
then raise exception 'Incorrect email'

_email是funcion的参数。 但它不起作用。我应该使用“IF”还是其他条件?

2 个答案:

答案 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;