Вопрос:
Я создаю функцию в языке 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