Je kan niet retourneert waarden van een DO
uitspraak. Maak in plaats daarvan een plpgsql-functie.
Er zijn verschillende manieren om het retourtype te definiëren met de RETURNING
clausule of met OUT
parameters. Lees de handleiding over CREATE FUNCTION
.
Er zijn verschillende manieren om waarden uit de functie te retourneren. Lees het hoofdstuk Terugkeren van een functie in de handleiding.
In het bijzonder, aangezien u hele rijen uit een tabel probeert te retourneren, kunt u het geregistreerde type van de tabel gebruiken voor de functiedeclaratie:
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;
Bel:
SELECT * FROM foo ();
Of probeer een zoekopdracht hier op SO. Ik heb veel gepost gerelateerde codevoorbeelden .
Oplossing voor DO
verklaring
Als u een functie niet kunt gebruiken, is de enige verstandige tussenoplossing met een DO-statement het gebruik van een tijdelijke 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;
Tijdelijke tabellen worden automatisch verwijderd aan het einde van de sessie .