【发布时间】:2015-12-16 13:23:53
【问题描述】:
我正在用 pgsql 脚本语言创建一个函数,此时我想做的是遍历查询的结果,并为每一行做一些特定的事情。我目前的尝试如下,其中temprow 被声明为temprow user_data.users%rowtype。有问题的代码如下:
FOR temprow IN
SELECT * FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10
LOOP
SELECT user_id,user_seasonpts INTO player_idd,season_ptss FROM temprow;
INSERT INTO user_data.leaderboards (season_num,player_id,season_pts) VALUES (old_seasonnum,player_idd,season_ptss);
END LOOP;
但是,我从中得到以下错误:ERROR: relation "temprow" does not exist。如果很清楚我想做什么,你能指出我正确的方法吗?
【问题讨论】:
-
正确的做法是:“不要迭代”。您似乎可以使用纯 SQL 完全可行:
insert into leaderboards(a,b,c) select x,y,z from users; -
正如我在答案中注意到的那样,
old_seasonnum不是从user_data.users中选择的,而是在前一点中选择的。 -
允许在需要表达式的地方使用常量(或变量,在 plpgsql 或准备好的语句中):
insert into foo(a,b,c) select 42, y, z from bar;注意:在您的代码中old_seasonnum甚至没有定义。 -
我只是把我遇到问题的代码部分放在这里,它是在实际代码中的先前扇区中定义的。如果你觉得有必要,我会把整个代码放在这里。
标签: sql postgresql plpgsql