Warum bekomme ich immer den folgenden Fehler von Postgres?
syntax error at or near "IF"
Ich habe PostgreSQL gelesen: Dokumentation: 8.3: Kontrollstrukturen . Zuerst habe ich versucht, eine schwierige Abfrage (mit Unterabfrage) auszuführen, aber dann habe ich versucht, eine einfache Abfrage wie folgt auszuführen:
IF 2 <> 0 THEN select * from users; END IF;
Der Fehler ist immer noch derselbe. Was mache ich falsch?
IF 2 <> 0 THEN select * from users; END IF;
Sie können keine PL/pgSQL-Anweisungen außerhalb von plpgsql-Funktionen verwenden. Und wenn dieses Fragment von der plpgsql-Funktion stammt, ist es auch Unsinn. Das Ergebnis einer Abfrage kann nicht direkt zurückgegeben werden, wie dies bei T-SQL der Fall ist.
CREATE OR REPLACE FUNCTION test(p int)
RETURNS SETOF users AS $$
BEGIN
IF p = 1 THEN
RETURN QUERY SELECT * FROM users;
END IF;
RETURN;
END;
$$ LANGUAGE plpgsql;
Wenn Sie ein Ergebnis der Funktion erhalten würden, müssen Sie die RETURN-Anweisung verwenden - plpgsql kennt nur die Funktion, es unterstützt keine Prozeduren - also hat das unbegrenzte SELECT keinen Sinn.
Sie schließen diese PL/pgSQL-Kontrollstruktur nicht in einen anonymen Block oder eine PL/pgSQL-Funktion ein.
Die SQL-Version dieser Kontrollstruktur finden Sie in den Dokumenten für CASE
.
Sie legen dieses PL/pgSQL nicht bei. Sie müssen mit anonymem Codeblock versehen werden. Beispiel für Ihren Code:
DO $$ BEGIN
IF 2 <> 0 THEN select * from users; END IF;
END$$;