Chcete-li místo typu řádku získat jednotlivé sloupce, zavolejte funkci pomocí:
SELECT * FROM testfunction();
Stejně jako byste vybrali všechny sloupce z tabulky.
Zvažte také tuto zkontrolovanou formu vaší testovací funkce:
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int)
LANGUAGE plpgsql AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TABLE tempTable AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END
$func$;
Konkrétně:
DECLARE
klíčové slovo je potřeba pouze jednou.
Vyhněte se deklarování parametrů, které jsou již (implicitně) deklarovány jako OUT
parametry v RETURNS TABLE (...)
doložka.
V Postgresu nepoužívejte identifikátory případu CaMeL bez uvozovek. Funguje to, identifikátory bez uvozovek jsou přetypovány na malá písmena, ale může to vést k matoucím chybám. Viz:
- Rozlišují se v názvech sloupců PostgreSQL velká a malá písmena?
Dočasná tabulka v příkladu je zcela zbytečná (pravděpodobně příliš zjednodušená). Uvedený příklad se scvrkává na:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;