PostgreSQL – Итерация по результатам запроса

Вопрос:Я создаю функцию в языке pgsql script, и то, что я хочу сделать в этой точке, - это перебирать результаты запроса и для каждой строки делать что-то конкретное. Моя текущая попытка следующая: temprow объявляется как temprow user_data.users%rowtype. Этот код выглядит следующим образом: FOR temprow IN SELECT * FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10

Вопрос:

Я создаю функцию в языке pgsql script, и то, что я хочу сделать в этой точке, – это перебирать результаты запроса и для каждой строки делать что-то конкретное. Моя текущая попытка следующая: 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

Оцените статью
Добавить комментарий