是否可以将 postgres 查询的结果作为输入传递给另一个函数?
作为一个非常人为的例子,假设我有一个类似的查询
SELECT id, name
FROM users
LIMIT 50
我想创建一个函数 my_function
,它获取第一个查询的结果集并返回最小 ID。这在 pl/pgsql 中可能吗?
SELECT my_function(SELECT id, name FROM Users LIMIT 50); --returns 50
最佳答案
您可以使用游标,但这对于计算最小值来说非常不切实际。
我会为此目的使用临时表,并传递表名以在动态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 注入(inject)。 More info in this related answer on dba.SE .我创建了临时表
ON COMMIT DROP
将其生命周期限制为当前事务。可能是也可能不是您想要的。您可以扩展此示例以获取更多参数。 Search for code examples for dynamic SQL with
EXECUTE
.
关于sql - 将 ResultSet 传递给 Postgresql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219991/