Potresti usare un cursore , ma è molto poco pratico per calcolare un minimo.
Userei una tabella temporanea a tale scopo e passare il nome della tabella da utilizzare in SQL dinamico :
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;
Chiama:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Punti principali
-
Il primo parametro è di tipo
regclass
per prevenire l'iniezione SQL. Maggiori informazioni in questa risposta correlata su dba. SE . -
Ho creato la tabella temporanea
ON COMMIT DROP
per limitarne la durata alla transazione corrente. Può o non può essere quello che vuoi. -
Puoi estendere questo esempio per prendere più parametri. Cerca esempi di codice per SQL dinamico con
EXECUTE
.