Sie könnten einen Cursor verwenden , aber das ist für die Berechnung eines Minimums sehr unpraktisch.
Ich würde eine temporäre Tabelle verwenden zu diesem Zweck und übergeben Sie den Tabellennamen zur Verwendung in dynamischem 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;
Aufruf:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Wichtige Punkte
-
Der erste Parameter ist vom Typ
regclass
SQL-Injection zu verhindern. Weitere Informationen in dieser verwandten Antwort auf dba. SE . -
Ich habe die temporäre Tabelle
ON COMMIT DROP
erstellt seine Lebensdauer auf die aktuelle Transaktion zu beschränken. Kann oder kann nicht das sein, was Sie wollen. -
Sie können dieses Beispiel um weitere Parameter erweitern. Suchen Sie mit
EXECUTE
nach Codebeispielen für dynamisches SQL .