Du kan ikke returnere værdier fra en DO
udmelding. Opret en plpgsql-funktion i stedet.
Der er flere måder at definere returtypen med RETURNING
klausul eller med OUT
parametre. Læs manualen om CREATE FUNCTION
.
Der er flere måder at returnere værdier fra funktionen på. Læs kapitlet Tilbageføring fra en funktion i manualen.
Især, da du forsøger at returnere hele rækker fra en tabel, kan du bruge den registrerede type af tabellen til funktionserklæringen:
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 til:
SELECT * FROM foo ();
Eller prøv en søgning her på SO. Jeg postede mange relaterede kodeeksempler .
Løsning for DO
erklæring
Hvis du ikke kan bruge en funktion, er den eneste halvvejs fornuftige løsning med en DO-sætning at bruge en midlertidig tabel:
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;
Midlertidige tabeller slettes automatisk i slutningen af sessionen .