Du kan använda en markör , men det är väldigt opraktiskt för att beräkna ett minimum.
Jag skulle använda en tillfällig tabell för det ändamålet och skicka tabellnamnet för användning i dynamisk 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;
Ring:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Huvudpunkter
-
Den första parametern är av typen
regclass
för att förhindra SQL-injektion. Mer info i detta relaterade svar på dba. SE . -
Jag gjorde temptabellen
ON COMMIT DROP
för att begränsa dess livslängd till den aktuella transaktionen. Kanske är det du vill eller inte. -
Du kan utöka detta exempel för att ta fler parametrar. Sök efter kodexempel för dynamisk SQL med
EXECUTE
.