从 table 返回单行的函数

Function returning single row from a table

我这辈子都无法让这个函数正确地 return 一行(它只会 return 一行,因为我正在查询主键)。看起来像这样。

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 =  AND gw =  AND idpi = ' INTO record USING gy, gw, pi;

END

$$
LANGUAGE plpgsql IMMUTABLE;

尝试各种 RETURN EXECUTERETURN QUERY 等,但是 nada:SQL 字符串将是一个动态定义的字符串,因为 table 名称最终会根据输入变量。

如果函数 returns SETOF 你可以使用 RETURN QUERY 不管有多少行(一行或多行)函数可以 return.

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 =  AND gw =  AND idpi = ' USING gy, gw, pi;

END

$$
LANGUAGE plpgsql;

不相关但很重要。该函数不应定义为 IMMUTABLE,因为其结果取决于存储在 table 中的数据。每 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.