Je zou een cursor kunnen gebruiken , maar dat is erg onpraktisch voor het berekenen van een minimum.
Ik zou een tijdelijke tabel gebruiken voor dat doel, en geef de tabelnaam door voor gebruik in dynamische SQL :
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;
Bel:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Belangrijkste punten
-
De eerste parameter is van het type
regclass
om SQL-injectie te voorkomen. Meer informatie in dit gerelateerde antwoord op dba. ZO . -
Ik heb de tijdelijke tabel gemaakt
ON COMMIT DROP
om de levensduur te beperken tot de huidige transactie. Misschien wel of niet wat je wilt. -
U kunt dit voorbeeld uitbreiden om meer parameters te gebruiken. Zoek naar codevoorbeelden voor dynamische SQL met
EXECUTE
.