Je crée une fonction dans le langage de script pgsql, et ce que je veux faire à ce stade, c'est itérer sur les résultats d'une requête et pour chaque ligne faire quelque chose de spécifique. Mon essai actuel est le suivant, où temprow
est déclaré comme temprow user_data.users%rowtype
. Le code en question est le suivant:
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;
Cependant, j'obtiens l'erreur suivante: ERROR: relation "temprow" does not exist
. S'il est clair ce que je veux faire, pourriez-vous me montrer la bonne façon de le faire?
temprow
est une variable d'enregistrement qui est liée à son tour à chaque enregistrement du premier SELECT
.
Vous devez donc écrire:
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;
Cette boucle pourrait être encore simplifiée en une seule requête:
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