0

Ich möchte während einer Anfrage überprüfen, ob die Einschränkung eingehalten wird. Wenn sie nicht gesendet werden, anstatt eine ERROR-Nachricht zu senden, geben Sie einfach FALSE zurück. Wie würde ich das tun?SQL Constraint Verification Funktion

Beispiel der Tabelle Ich verwende:

CREATE TABLE tree (
    name VARCHAR(64) UNIQUE PRIMARY KEY, 
    leaf INT CHECK (leaf > 0) 
); 

Beispiel der Funktionen I verwenden würde:

CREATE FUNCTION add_tree(name, nb_leaf) RETURNS BOOLEAN; 
CREATE FUNCTION remove_leaf(tree_name, leaf_to_remove) RETURNS BOOLEAN; 

In meiner Funktion wäre es zu repetitiv sein für den Namen

zu überprüfen
IF EXISTS (SELECT name FROM tree WHERE name=tree_name) THEN... 

Da habe ich schon eine UNIQUE-Einschränkung, aber wenn ich nicht überprüfe, bekomme ich natürlich die Fehlermeldung, wie kann ich nein t Verwenden Sie die Prüfung (IF ..) und nicht die Fehlermeldung, aber eine Rückgabe false statt, wenn die Eingabe falsch ist?

PS: Ich verwende postgresql, ob das etwas ändert

+0

In Oracle können Sie Benutzerdefinieren erstellen ed Ausnahmen. Ich bin mir ziemlich sicher, dass dies auch im Nachhinein möglich sein muss. Wenn der Fehler ausgeführt wird, können Sie false – massie

Antwort

0

Wenn ausnahmsweise false zurück von Ihrer Funktion ausgelöst wird:

EXCEPTION 
    WHEN OTHERS THEN 
    return false; 
END; 
wird am Ende der Seite, die Sie

http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html

ein Beispiel sehen:

DECLARE 
    text_var1 text; 
    text_var2 text; 
    text_var3 text; 
BEGIN 
    -- some processing which might cause an exception 
    ... 
EXCEPTION WHEN OTHERS THEN 
    GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT, 
          text_var2 = PG_EXCEPTION_DETAIL, 
          text_var3 = PG_EXCEPTION_HINT; 
END; 
+0

zurückgeben, aber diese Syntax zwingt mich, die tun WENN EXISTS (SELECT Name FROM Baum WHERE Name = Baumname) THEN ... was unterscheidet sich nicht davon, es in meiner Kernfunktion nicht zu tun? (Da ich keine WANN Ausnahme verwenden kann, erhalte ich einen Fehler bei "raise") – sourpet

+0

In Ihrer Funktion add_tree können Sie eine Einfügung schreiben (ich nehme an, Sie tun) und wenn dies wegen einer einzigartigen Einschränkung oder eines anderen Fehlers fehlschlägt, wird Ihre AUSNAHME sie fangen und falsch zurückgeben. In Oracle können Sie EXCEPTION WHEN OTHERS THEN verwenden. In postgresql auch. – massie

+0

Ja! Andere arbeiteten dank! – sourpet