2016-05-24 27 views
0

Ich habe eine Funktion, um einige Werte in eine Tabelle einzufügen, aber vor dem Einfügen möchte ich überprüfen, ob die E-Mail-Adresse richtig ist. Ist dies nicht der Fall, brechen Sie die Funktion ab und geben Sie einen Fehler zurück. Fall stimmt, mach weiter.CASE-WHEN innerhalb der Funktion POSTGRESQL

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

_email ist der Parameter von funcion. Aber es funktioniert nicht. Sollte ich "IF" oder andere bedingte verwenden?

Antwort

3

CASE Arbeiten getan werden, aber IF scheint besser geeignet.
Sie haben einig sinnlosen Lärm im Ausdruck und ich denke, Sie die Logik bekamen nach hinten: ‚Falscher E-Mail‘ ausgelöst werden soll, wenn _email tun nicht Spiel das Muster:

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; 

Das neue ASSERT (Postgres 9.5+) würde auch funktionieren, aber das ist wirklich für das Debuggen gedacht:

ASSERT _email ~ '^[^@\s][email protected][^@\s]+(\.[^@\s]+)+$', 'Incorrect email'; 
+0

Arbeitete großartig. Ich benutze diesen Weg in meiner Funktion. Vielen Dank! – Antonio

0

Sie sollten das Gehäuse in plpgsql verwenden können. Offensichtlich, was Sie versuchen können zu tun, durch if-Anweisung als auch ...

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