Ich muss mehr über Postgres lernen, aber ich versuche, eine Funktion zu schreiben, die auf einen Trigger in meinem Postgres db verweist. Normalerweise funktionieren die Funktionen, die ich schreibe gut, jedoch diese spezielle Funktion Fehler am Ende der Ausgabe um die Syntax zurückgibt.Erstelle meinen ersten Trigger in Postgresql mit Syntaxfehler in der Nähe von "LANGUAGE"
Ich habe eine Fixtures-Tabelle mit einer Spalte namens "Ergebnis". Ich möchte die Noten von der Vorrichtung lesen, z.B. Wölfe 0: 0 Ipswich und triggern in 'Draw'.
Die Abfrage I schreibe wie folgt:
CREATE OR REPLACE FUNCTION sppullscoretrigger()
RETURNS trigger
SECURITY DEFINER
AS $BODY$
DECLARE
payload text;
BEGIN
SELECT NEW.Home_Side_Score, NEW.Away_Side_Score FROM Fixtures;
IF NEW.Home_Side_Score is NULL or NEW.Away_Side_Score is NULL THEN NEW.Result = 'TBC';
IF NEW.Home_Side_Score = NEW.Away_Side_Score THEN NEW.Result = 'Draw';
IF NEW.Home_Side_Score > NEW.Away_Side_Score THEN NEW.Result = 'Home_Win';
IF NEW.Home_Side_Score < NEW.Away_Side_Score THEN NEW.Result = 'Away_Win';
ELSE NEW.Result = 'Error';
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql
CREATE TRIGGER trgscore
BEFORE INSERT OR UPDATE
ON Fixtures
FOR EACH ROW
EXECUTE PROCEDURE sppullscoretrigger();
ich nur die Grundfunktionen geschrieben haben vor, aber ich bin wirklich kämpfen mit immer dieser Trigger zu arbeiten.
Ihnen fehlt ein ';' nach der Triggerfunktion (und vor dem 'create trigger'). Außerdem: 'SELECT NEW.Home_Side_Score, NEW.Away_Side_Score FROM Fixtures;' wählt *** alle *** Zeilen aus der Tabelle 'fixtures', jedoch mit konstanten Werten für jede Zeile. Sie brauchen diese Auswahl überhaupt nicht. In einer Reihe Ebene Trigger können Sie nur auf die 'neuen' und' alten' Datensätze zugreifen –
Vielen Dank. Ich habe das fehlende Semikolon eingefügt, und das Problem wurde gelöst, ebenso wie das von Joachim identifizierte ELSIF-Problem. – LemusThelroy
Ich habe gerade versucht, diesen Trigger zu verwenden, wenn ich Daten einfüge und es sagt mir "Error: record 'New' hat kein Feld 'home_side_score' CONTEXT: SQL-Anweisung" SELECT New.Home_Side_Score ist NULL oder New.Away_Sido_Score ist NULL "... ." Irgendwelche Ideen? Ich dachte, das New-Attribut würde die Daten enthalten, die ich importiere, so dass es ein Feld home_side_score usw. geben würde. – LemusThelroy