Możesz użyć kursora , ale to bardzo niepraktyczne przy obliczaniu minimum.
Używałbym tabeli tymczasowej w tym celu i przekaż nazwę tabeli do użycia w dynamicznym 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;
Zadzwoń:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Główne punkty
-
Pierwszy parametr jest typu
regclass
aby zapobiec wstrzykiwaniu SQL. Więcej informacji w tej powiązanej odpowiedzi na dba. SE . -
Utworzyłem tabelę tymczasową
ON COMMIT DROP
ograniczyć czas życia do bieżącej transakcji. Może, ale nie musi być tym, czego chcesz. -
Możesz rozszerzyć ten przykład, aby uzyskać więcej parametrów. Wyszukaj przykłady kodu dla dynamicznego SQL za pomocą
EXECUTE
.