Du kan ikke sende en tabel som en parameter, kun navnet på tabellen:
CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
EXECUTE format('INSERT INTO test.out_table '
'SELECT id, another_field FROM %I', tbl);
RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;
Når du sender et tabelnavn, skal du udføre en dynamisk kommando. Du kan kun gøre dette i en plpgsql-funktion. Brugen af format()
funktion med %I
modifikator beskytter mod SQL-injektion. Rækkerne returneres ved hjælp af RETURN NEXT QUERY
sætning, igen med en dynamisk kommando.
Bemærk, at denne logik begge indsætter et sæt poster i tabel test.out_table
og returnerer derefter det samme sæt poster. Ikke sikker på, om det er det, du virkelig ønsker.