PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Holen Sie sich das Ergebnis der Abfrage in der DO-Anweisung

Das können Sie nicht Rückgabewerte von einem DO Aussage. Erstellen Sie stattdessen eine plpgsql-Funktion.

Es gibt mehrere Möglichkeiten, den Rückgabetyp mit dem RETURNING zu definieren -Klausel oder mit OUT Parameter. Lesen Sie das Handbuch zu CREATE FUNCTION .

Es gibt mehrere Möglichkeiten, Werte von der Funktion zurückzugeben. Lesen Sie das Kapitel Rückkehr aus einer Funktion im Handbuch.

Da Sie versuchen, ganze Zeilen aus einer Tabelle zurückzugeben, können Sie insbesondere den registrierten Typ der Tabelle für die Funktionsdeklaration verwenden:

CREATE FUNCTION foo ()
  RETURNING SETOF test_log 
$func$
BEGIN

IF 'a' = 'a' THEN
  RETURN QUERY
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$func$ LANGUAGE plpgsql;

Aufruf:

SELECT * FROM foo ();

Oder versuchen Sie eine Suche hier auf SO. Ich habe viele gepostet zugehörige Codebeispiele .

Workaround für DO Aussage

Wenn Sie eine Funktion nicht verwenden können, ist der einzige halbwegs sinnvolle Workaround mit einer DO-Anweisung die Verwendung einer temporären Tabelle:

CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;

$do$
BEGIN

IF 'a' = 'a' THEN
  INSERT INTO tbl_tmp
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$do$ LANGUAGE plpgsql;

SELECT * FROM tbl_tmp;

Temporäre Tabellen werden am Ende der Sitzung automatisch gelöscht .