Você pode usar um cursor , mas muito impraticável para calcular um mínimo.
Eu usaria uma tabela temporária para essa finalidade e passe o nome da tabela para uso em SQL dinâmico :
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;
Ligar:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Pontos principais
-
O primeiro parâmetro é do tiporegclass
para evitar injeção de SQL. Mais informações nesta resposta relacionada em dba. SE .
-
Eu fiz a tabela temporáriaON COMMIT DROP
para limitar sua vida útil à transação atual. Pode ou não ser o que você quer.
-
Você pode estender este exemplo para obter mais parâmetros. Pesquisar exemplos de código para SQL dinâmico comEXECUTE
.
-> Demonstração do SQLfiddle