如何遍历查询结果

新手上路,请多包涵

我正在用 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 。如果很清楚我想做什么,你能指出我正确的方法吗?

原文由 Noob Doob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

temprow 是一个记录变量,它依次绑定到第一个 SELECT 的每个记录。

所以你应该写:

 FOR temprow IN
        SELECT * FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10
    LOOP
        INSERT INTO user_data.leaderboards (season_num,player_id,season_pts) VALUES (old_seasonnum,temprow.userd_id,temprow.season_ptss);
    END LOOP;

这个循环可以进一步简化为单个查询:

 INSERT INTO user_data.leaderboards (season_num,player_id,season_pts)
SELECT old_seasonnum,player_idd,season_ptss FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10

原文由 Renzo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进