gpt4 book ai didi

postgresql - 如何在postgresql中编写返回表的非参数化函数

转载 作者:行者123 更新时间:2023-11-29 13:10:55 25 4
gpt4 key购买 nike

create or replace function demowhile_()
returns table (id integer,name varchar(50))
language 'plpgsql'
as $$

declare id integer;
declare name varchar(50);

begin
CREATE temporary TABLE demo_(id integer,name varchar(50));
CREATE temporary TABLE temp_ (id integer);
insert into temp_ (select id from demo);

while (select count(*) from temp_) <> 0
loop
id = (select top(1) id from temp_);
name = (select name from demo where id = id);
insert into demo_ values (id,name);

delete from temp_ where id = id;

end loop;

return query select id,name from demo;
end;
$$;

**** 执行时出现类似 **** 的错误

select * from demowhile();

**ERROR: column reference "id" is ambiguous
LINE 1: insert into temp_ (select id,name from demo)
^
DETAIL: It could refer to either a PL/pgSQL variable or a table column.
QUERY: insert into temp_ (select id,name from demo)
CONTEXT: PL/pgSQL function demowhile() line 9 at SQL statement
SQL state: 42702**

最佳答案

demowhile_() returns table (id integer,name varchar(50) 基本上与 demowhile_(out id integer, out name varchar(50)) returns setof record

id 输出列可以直接从函数中引用。然后您还创建了一个名为 id 的函数变量。那么当你给id赋值的时候,你是给输出参数赋值还是给声明的变量赋值呢? PG 不知道,所以你会得到那个错误。

当然,简单的解决方案是给每个人一个唯一的名字。

关于postgresql - 如何在postgresql中编写返回表的非参数化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com