我知道从表中插入值的正确方法:
insert into city (pop) select pop+2 from city
我只是想知道游标在Pl / pgsql中是如何工作的。
我希望在循环中使用cursor来插入一些值:
create or replace function test( ) returns void as
$$
declare
cur cursor for select pop+2 from city order by pop;
b int;
row record;
begin
for row in cur
LOOP
fetch cur into b;
insert into city(pop) select b;
end loop;
end;
$$ language plpgsql
但是,当我输入select test()
并且结果表为:
很奇怪,只插入了两行。所以我想知道导致这个结果的原因是什么?
在04/05/2016更新我的问题:
我修改了这个函数:
create or replace function test( ) returns void as
$$
declare
cur cursor for select * from city order by pop;
b record;
begin
for b in cur
LOOP
insert into city(pop) select b.pop+2;
RAISE NOTICE ' % IS INSERTED' , b;
end loop;
end;
$$ language plpgsql
然后我得到了正确的结果:
但我仍然想知道为什么在第一个函数中,只插入了两行。
答案 0 :(得分:1)
我终于弄明白为什么结果是错误的,就像 Abelisto的评论一样。我在每个步骤loop
做了两个取件器:
for row in cur LOOP
,fetch cur into b
第一行where pop=500
和第pop =1000
段for loop
中已经提取b
,String[] words = str.split("(?<=\\G...)");
无法获取。{ / p>