Можете да използвате курсор , но това е много непрактично за изчисляване на минимум.
Бих използвал временна таблица за тази цел и предайте името на таблицата за използване в динамичния 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;
Обаждане:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Основни точки
-
Първият параметър е от тип
regclass
за предотвратяване на SQL инжектиране. Повече информация в този свързан отговор на dba. SE . -
Направих временната таблица
ON COMMIT DROP
да ограничи живота му до текущата транзакция. Може или не може да бъде това, което искате. -
Можете да разширите този пример, за да вземете повече параметри. Търсете примери за код за динамичен SQL с
EXECUTE
.