Du kan bruge en markør , men det er meget upraktisk til at beregne et minimum.
Jeg ville bruge en midlertidig tabel til det formål, og send tabelnavnet til brug 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 til:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Vigtige punkter
-
Den første parameter er af typen
regclass
for at forhindre SQL-injektion. Mere info i dette relaterede svar på dba. SE . -
Jeg lavede temp-tabellen
ON COMMIT DROP
at begrænse dens levetid til den aktuelle transaktion. Måske er det, hvad du ønsker. -
Du kan udvide dette eksempel til at tage flere parametre. Søg efter kodeeksempler for dynamisk SQL med
EXECUTE
.