Postgresql函数返回有变化的表

Posted

技术标签:

【中文标题】Postgresql函数返回有变化的表【英文标题】:Postgresql function to return table with change 【发布时间】:2021-12-13 22:48:56 【问题描述】:

我在函数调用中遇到错误。错误是:

列引用“出租”不明确第 2 行:CASE active DETAIL:它 可以引用 PL/PGSQL 变量或表列

查询是:

CREATE FUNCTION convert()
RETURNS TABLE (customerid int, fname varchar, lname varchar, email varchar, tripDate timestamp, rental varchar)
Language plpgsql
AS $$
BEGIN
     RETURN QUERY
            SELECT CASE WHEN rental = 1 
                        THEN 'yes'
                        ELSE 'no'
             END
     FROM EML
END; $$;

【问题讨论】:

CASE,没有END 【参考方案1】:

改变

SELECT CASE WHEN rental = 1 THEN 'yes'
                        WHEN rental = 0 THEN 'no'

SELECT 
    CASE 
        WHEN rental = 1 
            THEN 'yes'
         ELSE  'no'
END

编辑部分:

如果你不想只迭代二进制值,你应该像这样添加这个条件:

RETURN QUERY
         SELECT 
        CASE 
            WHEN rental = 1 
                THEN 'yes'
             ELSE  'no'
    END
 FROM EML WHERE rental In(0, 1)

【讨论】:

我同意,这里还需要一个 else 。但这不会假设所有其他值都必须是'no'?如果值为“3”、“是”、“cookie”怎么办? 非二进制值需要什么? @arcee123 见编辑部分。 @arcee123 在出租列中只有 1 和 0 我想使用此函数重新显示表格,将该列类型从 int 更改为 varchar 并返回 Yes 或 No。上面仍然是抛出语法错误。知道我正在更改输出中的数据类型,是否需要先使用 alter table 命令? 出租字段的数据类型是什么?我得到了 1/0 的东西,但是如果我们处理的是位 vs 字节 vs 最小,那么我可以看到错误的原因。

以上是关于Postgresql函数返回有变化的表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 postgreSQL 中处理复合类型的变化

从 Postgres 中的表函数返回多行的最简单方法是啥?

从 PostgreSQL 函数返回具有特定参数的表

从烧瓶中的 PostgreSQL 函数提交事务

从 Postgres 函数返回数据

返回行的简单 PostgreSQL 函数