我正在用pgsql脚本语言创建一个函数,在这一点上我想做的是迭代查询的结果,并对每一行执行特定的操作.我当前的try 如下,其中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.如果我清楚地知道我想做什么,你能告诉我正确的方法吗?

推荐答案

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

Postgresql相关问答推荐

函数返回查询执行plpgsql时不存在列

我无法让pg_cron扩展在最新的Postgres 16图像中工作

PostgreSQL plpgsql函数问题

Select 与输入数组完全相交的所有行?

Ubuntu 上的 PostgreSQL 安装:找不到initdb命令

在 PostgreSQL 中 Select 数字命名列会返回 ?column?

查找列中的数据是否满足sql中的数据类型条件

PostgreSQL bytea 网络流量双倍预期值

在 Ubuntu 11.04 服务器中启用对 postgresql 的 PHP 支持

PostgreSQL 如何比 SQLite 更快地执行写入?

postgreSQL 将列数据类型更改为没有时区的时间戳

冲突中的 Postgres 会更新复合主键

SQL:当谈到 NOT IN 和 NOT EQUAL TO 时,哪个更有效,为什么?

如何 Select 列值为空的行?

如何在 plpgsql 中使用记录类型变量?

SQL Select 一列中具有重复值的所有行

Postgresql 中的 NOT EXISTS 子句

docker postgres 无法从指定端口启动

有没有办法确保 WHERE 子句在 DISTINCT 之后发生?

实时监控 PostgreSQL 查询的应用程序?