2016-05-24 5 views
0

У меня есть функция для вставки некоторых значений в таблицу, но перед вставкой я хочу проверить, правильно ли адрес электронной почты. Если нет, отмените функцию и верните ошибку. Дело верно, продолжайте.CASE-WHEN в функции POSTGRESQL

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

_email является параметром funcion. Но это не работает. Должен ли я использовать «IF» или другое условное?

ответ

3

CASE работает, но IF представляется более целесообразным.
У вас есть какой-то бессмысленный шум в выражении, и я думаю, что вы получили логику назад: «Неправильный адрес электронной почты» должен быть запущен, если _email делает не соответствуют шаблону:

IF _email ~ '^[^@\s][email protected][^@\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][email protected][^@\s]+(\.[^@\s]+)+$', 'Incorrect email'; 
+0

Работало отлично. Я использую этот способ в своей функции. Благодаря! – Antonio

0

Вы должны иметь возможность использовать корпус внутри plpgsql. Очевидно, что вы пытаетесь сделать, может быть сделано путем, если заявление, а также ...

case when _email ~ '^[^@\s][email protected][^@\s]+(\.[^@\s]+)+$' = true then 
      raise exception 'Incorrect email'; 
     else 
      --proceed with insert 
    end case; 
Смежные вопросы