我这辈子都不能让这个函数正确地返回一行(它只会在我查询主键时返回一行)。看起来像这样。
CREATE OR REPLACE FUNCTION sch.getrow(
IN gy integer,
IN gw integer,
IN pi uuid)
RETURNS SETOF record AS $$
BEGIN
EXECUTE 'SELECT * FROM sch.foo WHERE gy = $1 AND gw = $2 AND idpi = $3' INTO record USING gy, gw, pi;
END
$$
LANGUAGE plpgsql IMMUTABLE;
尝试各种RETURN EXECUTE
和RETURN QUERY
等,但是 nada:SQL 字符串将是一个动态定义的字符串,因为表名最终会根据输入而改变变量。
最佳答案
如果函数返回 SETOF
,您可以使用 RETURN QUERY
,无论函数可以返回多少行(一行或多行)。
CREATE OR REPLACE FUNCTION sch.getrow(
IN gy integer,
IN gw integer,
IN pi uuid)
RETURNS SETOF record AS $$
BEGIN
RETURN QUERY
EXECUTE 'SELECT * FROM sch.foo WHERE gy = $1 AND gw = $2 AND idpi = $3' USING gy, gw, pi;
END
$$
LANGUAGE plpgsql;
不相关但很重要。该函数不应定义为 IMMUTABLE
,因为它的结果取决于表中存储的数据。每the documentation:
IMMUTABLE indicates that the function cannot modify the database and always returns the same result when given the same argument values; that is, it does not do database lookups or otherwise use information not directly present in its argument list.
关于postgresql - 从表中返回单行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098196/