gpt4 book ai didi

postgresql - 从表中返回单行的函数

转载 作者:行者123 更新时间:2023-11-29 13:11:27 24 4
gpt4 key购买 nike

我这辈子都不能让这个函数正确地返回一行(它只会在我查询主键时返回一行)。看起来像这样。

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 EXECUTERETURN 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com