wake-up-neo.net

PostgreSQL IF-THEN-ELSE-Kontrollstruktur

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?

10
Elkan
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.

18
Pavel Stehule

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 .

4
Milen A. Radev

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$$;
1
user