【问题标题】:Column reference is ambiguous in PostgreSQL functionPostgreSQL 函数中的列引用不明确
【发布时间】:2021-12-14 04:30:03
【问题描述】:

我已经创建了一个这样的函数。

create or replace function pesquisar_imoveis_residenciais_venda()
returns table(preco decimal)
as $$
begin

    select preco from casa_venda;

end; $$

language 'plpgsql';

当我调用它时

  select pesquisar_imoveis_residenciais_venda()

我得到列引用 preco 不明确。

我已经访问了一些相关的问题。但是它们太难理解了,非常复杂的功能。

【问题讨论】:

  • 对于这样的简单查询,language sql 函数会更高效

标签: sql postgresql


【解决方案1】:

RETURNS QUERY子句中定义的列是PL/pgSQL函数体中的变量,所以变量preco和同名表列之间存在歧义。您需要使用表名或函数名来限定引用以消除歧义。

但是您的函数定义还有其他问题。我想你想要:

create or replace function pesquisar_imoveis_residenciais_venda()
returns table(preco decimal)
as $$
begin
    return query select cv.preco from casa_venda cv;
end; $$

language 'plpgsql';

select *
from pesquisar_imoveis_residenciais_venda();

Here 是一个 dbfiddle。

【讨论】:

    【解决方案2】:

    表示 casa_venda 表中的列名 Preco 不存在或存在超过 1 次。

    【讨论】:

    • 这是错误的。问题是preco 也是输出列的名称,因此不明确。
    猜你喜欢
    • 2023-01-18
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多