Anda tidak dapat melewatkan tabel seperti parameter, hanya nama tabel:
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;
Saat memberikan nama tabel, Anda perlu menjalankan perintah dinamis. Anda hanya dapat melakukan ini dalam fungsi plpgsql. Penggunaan format()
fungsi dengan %I
pengubah melindungi terhadap injeksi SQL. Baris dikembalikan menggunakan RETURN NEXT QUERY
frase, sekali lagi dengan perintah dinamis.
Perhatikan bahwa logika ini keduanya menyisipkan satu set catatan ke dalam tabel test.out_table
dan kemudian mengembalikan kumpulan catatan yang sama. Tidak yakin apakah itu yang Anda inginkan.