Anda bisa menggunakan kursor , tapi itu sangat tidak praktis untuk komputasi minimum.
Saya akan menggunakan tabel sementara untuk tujuan itu, dan berikan nama tabel untuk digunakan dalam SQL dinamis :
CREATE OR REPLACE FUNCTION f_min_id(_tbl regclass, OUT min_id int) AS
$func$
BEGIN
EXECUTE 'SELECT min(id) FROM ' || _tbl
INTO min_id;
END
$func$ LANGUAGE plpgsql;
Telepon:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Poin utama
-
Parameter pertama bertipe
regclass
untuk mencegah injeksi SQL. Info lebih lanjut dalam jawaban terkait ini di dba. SE . -
Saya membuat tabel temp
ON COMMIT DROP
untuk membatasi masa pakainya untuk transaksi saat ini. Mungkin atau mungkin tidak seperti yang Anda inginkan. -
Anda dapat memperluas contoh ini untuk mengambil lebih banyak parameter. Telusuri contoh kode untuk SQL dinamis dengan
EXECUTE
.