2016-05-24 10 views
0

私はテーブルにいくつかの値を挿入する機能がありますが、挿入する前に電子メールアドレスが正しいかどうかチェックしたいと思います。そうでない場合は、関数を壊してエラーを返します。本当の場合、行ってください。CASE-WHEN内の関数POSTGRESQL

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

_emailは関数のパラメータです。 しかし、それは動作していません。私は "IF"か他の条件を使うべきですか?

答えて

3

CASE作品if文を通じて行うが、より適切な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

Worked great。私は私の機能でこの方法を使用しています。ありがとう! – Antonio

0

このケースはplpgsql内で使用できるはずです。もちろん、何をやろうとしているが、同様...

case when _email ~ '^[^@\s][email protected][^@\s]+(\.[^@\s]+)+$' = true then 
      raise exception 'Incorrect email'; 
     else 
      --proceed with insert 
    end case;