Bonjour,
je viens de me mettre à PLPGSQL et j'ai un problème dans l'utilisation des curseur.
Dans la doc (et dans le souvenir de mes cours) j'ai vu qu'il était possible d'utiliser un curseur dans une boucle FOR, ce qui permettait de se passer de l'ouverture et de la fermeture du curseur, géré automatiquement par celle ci.
J'ai donc essayé et je reçois une erreur assez étrange. Malgré mes recherche je n'ai pas trouvé l'origine.
Voici le code de ma petite fonction de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE OR REPLACE FUNCTION test () RETURNS void AS $$ DECLARE c1 cursor IS select * from joueur; joueur_row joueur%ROWTYPE; BEGIN FOR joueur_row in c1 LOOP RAISE NOTICE '% %', joueur_row.joueur_id, joueur_row.joueur_nom; END LOOP; RETURN; END $$ LANGUAGE PLPGSQL
Je reçois l'erreur suivant :
Si j'utilise un curseur implicite (FOR joueur_row in select * from joueur), la fonction marche, si je remplace la boucle FOR par un simple LOOP avec ouverture, fermeture et fetch manuel, ça marche aussi mais bien sur c'est beaucoup plus lourd à faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ERREUR: erreur de syntaxe sur ou près de << $1 >> au caractère 3 REQUÊTE : $1 CONTEXTE : PL/pgSQL function "test" line 6 at for over select rows LIGNE 1 : $1
Je ne vois vraiment pas d'où cela vient, la syntaxe donné par la doc n'est pas compliqué :
Si quelqu'un aurait une idée?FOR recordvar IN bound_cursor [ ( argument_values ) ] LOOP
statements
END LOOP [ label ];
Merci.
Partager