私は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
。私が何をしたいのかが明確な場合、それを行う正しい方法を教えてください。
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