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

标签 postgresql plpgsql

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

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/

相关文章:

c# - 在 C# 中存储查询还是在 Postgres 中使用存储函数?

postgresql - 如何查找 EnterpriseDB 中加载了哪些语言?

sql - 如何计算值不同的列?

php - 如何集中重复使用但每次使用不同分区的复杂窗口查询

java - JPA findBy 字段忽略大小写

sql - 为什么我的 SQL 语法显示为空?

javascript - 如何根据经纬度计算距离

postgresql - 在 postgreSQL 中插入、删除表,如 SQL Server?

postgresql - while 在 postgresql 中的函数

python - 使用 psycopg2 无密码连接到数据库