Du kan inte returnera värden från en DO
påstående. Skapa en plpgsql-funktion istället.
Det finns flera sätt att definiera returtypen med RETURNING
sats eller med OUT
parametrar. Läs manualen om CREATE FUNCTION
.
Det finns flera sätt att returnera värden från funktionen. Läs kapitlet Återvända från en funktion i manualen.
I synnerhet, eftersom du försöker returnera hela rader från en tabell, kan du använda den registrerade typen av tabellen för funktionsdeklarationen:
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;
Ring:
SELECT * FROM foo ();
Eller prova en sökning här på SO. Jag har lagt upp många relaterade kodexempel .
Lösning för DO
uttalande
Om du inte kan använda en funktion är den enda halvvägs vettiga lösningen med en DO-sats att använda en tillfällig tabell:
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;
Tillfälliga tabeller tas bort automatiskt i slutet av sessionen .