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 .