クエリの結果を反復処理する方法 質問する

クエリの結果を反復処理する方法 質問する

私は 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何をしたいのかが明確な場合は、正しい方法を教えていただけますか?

ベストアンサー1

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

おすすめ記事