【发布时间】:2017-04-18 19:17:16
【问题描述】:
我通过传递一个类型来创建一个存储过程,并在过程中执行一个循环,以便我可以插入每个信息类型
这是我的类型
create type leketo as(id integer, name text);
在我的类型中插入行的函数
CREATE OR REPLACE FUNCTION getLeketo()
RETURNS SETOF leketo AS
$BODY$
declare
l leketo;
begin
l.id := 1;
l.name := 'One';
return next l;
l.id := 2;
l.name := 'Two';
return next l;
l.id := 3;
l.name := 'Three';
return next l;
l.id := 4;
l.name := 'Four';
return next l;
l.id := 5;
l.name := 'Five';
return next l;
end
$BODY$
LANGUAGE plpgsql VOLATILE;
运行函数会将这个返回给我
select * from getLeketo()
1 One
2 Two
3 Three
4 Four
5 Five
在此过程中,我们将遍历所有行
CREATE OR REPLACE FUNCTION loopLeketo(pl leketo)
RETURNS void AS
$BODY$
declare
l leketo;
begin
for l in (select * from pl) loop
raise notice '----------------------------------------';
raise notice 'id=%, name=%', l.id, l.name;
end loop;
end
$BODY$
LANGUAGE plpgsql VOLATILE;
如果我尝试这样做,我会收到以下消息
DO $$
declare
l leketo;
begin
select * from getLeketo() into l;
PERFORM loopLeketo(l);
end$$;
错误:关系“pl”不存在
【问题讨论】:
标签: arrays postgresql stored-procedures types plpgsql