我想创建一个PSQL函数,它返回一个像result的表。我的函数定义如下所示:
create or replace function myfunc1()
returns table(id varchar(50), title varchar(50))
as $$
begin
return query select id, title from books;
end;
$$ language plpgsql;
但是,当我调用该函数时,我收到了这个错误:
错误:列引用“id”不明确 第1行:从书籍中选择ID,标题 ^ DETAIL:它可以引用PL / pgSQL变量或表列。
显然,这是因为我在返回表和目标表中都使用了列名'id'。最简单的解决方案是更改列名称。但我在这里寻找一种让我使用我想要的列名的方法。此外,更改名称会使我的代码变得奇怪,而其他人难以理解。
答案 0 :(得分:3)
通过限定列名来消除歧义:
create or replace function myfunc1()
returns table(id varchar(50), title varchar(50)) as
$$
select books.id, books.title from books;
$$ language sql stable;
答案 1 :(得分:1)
SELECT books.id, title FROM books
?
答案 2 :(得分:0)
函数定义的... returns table(id varchar(50), title varchar(50)) ...
部分只是another way to define OUT parameters。所以现在你有两个名为id
和title
的OUT参数和两个列(来自book
表)你引用命名...是的,你猜对了 - id
和title
。
避免这种歧义的一种方法是在函数定义中重命名返回表的列名:
CREATE OR REPLACE FUNCTION myfunc1() RETURNS TABLE(p_id VARCHAR(50), p_title VARCHAR(50)) AS $_$
BEGIN
RETURN QUERY SELECT id, title FROM books;
END;
$_$ LANGUAGE plpgsql;