PostgreSQL 函数中的列引用不明确
Posted
技术标签:
【中文标题】PostgreSQL 函数中的列引用不明确【英文标题】:Column reference is ambiguous in PostgreSQL function 【发布时间】: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
函数会更高效
【参考方案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
也是输出列的名称,因此不明确。以上是关于PostgreSQL 函数中的列引用不明确的主要内容,如果未能解决你的问题,请参考以下文章