Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2006, 10h24   #1
Membre habitué
 
Avatar de LaNat
 
Inscription : avril 2005
Messages : 162
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : avril 2005
Messages : 162
Points : 140
Points : 140
Par défaut Problème de curseur

Bonjour,
J'aimerais utiliser un curseur et comme je ne connais pas bien la syntaxe j'ai été me renseigner sur la documentation postgresql. Voici ma requête (très simple, pour commencer)
Code :
1
2
3
declare
moncurseur cursor FOR SELECT * FROM frel_conc;
open moncurseur;
Le problème c'est que j'ai une erreur sur le open
Code :
parse error at OR near "open"
et je ne comprends pas pourquoi sachant que j'ai respecté la syntaxe de la doc (de ma version : 7.3)
Merci d'avance pour votre aide.
LaNat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2006, 12h59   #2
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 738
Points : 2 738
Citation:
Envoyé par LaNat
Bonjour,
J'aimerais utiliser un curseur et comme je ne connais pas bien la syntaxe j'ai été me renseigner sur la documentation postgresql. Voici ma requête (très simple, pour commencer)
Code :
1
2
3
declare
moncurseur cursor FOR SELECT * FROM frel_conc;
open moncurseur;
Le problème c'est que j'ai une erreur sur le open
Code :
parse error at OR near "open"
et je ne comprends pas pourquoi sachant que j'ai respecté la syntaxe de la doc (de ma version : 7.3)
Merci d'avance pour votre aide.
non justement vous ne respectez pas la syntaxe :

declare moncurseur refcursor ;
open moncurseur for select * from frel_conc;

ou

declare moncurseur cursor for select * from frel_conc;

tout court…
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2006, 13h33   #3
Membre habitué
 
Avatar de LaNat
 
Inscription : avril 2005
Messages : 162
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : avril 2005
Messages : 162
Points : 140
Points : 140
Pourtant d'après la doc :

Code :
1
2
3
DECLARE
    curs1 refcursor;
    curs2 CURSOR FOR SELECT * FROM tenk1;
Code :
1
2
3
4
5
6
7
19.7.2.1. OPEN FOR SELECT
 
OPEN curs1 FOR SELECT * FROM foo
 
19.7.2.3. Opening a bound cursor
 
OPEN curs2;
J'avais choisi de lier directement la requête au curseur car sinon j'ai une erreur sur refcursor

Donc je ne l'ouvre pas? Je le déclare et je fais mon fetch juste après?
LaNat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2006, 19h43   #4
Invité de passage
 
Inscription : novembre 2006
Messages : 2
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : novembre 2006
Messages : 2
Points : 4
Points : 4
Envoyer un message via MSN à DaMonkey
Il faudrait que tu donnes 2-3 lignes avant ton OPEN et 2-3 lignes après... afin de voir où se situe réellement le problème.

De plus, sache qu'il faut que tu ouvres toujours ton cursor, peut importe la maniere que tu le déclares

Et enfin, je pense que ton erreur pourrait éventuellement venir du fait que tu fais un "SELECT * FROM ...", essaye avec un SELECT réellement sélectif, càd "SELECT champ1, champ2, champ3 FROM ....".

Car par après tu devras (et c souvent le but d'un cruseur) récupérer les données...
donc dans ton fetch tu auras qqch comme "FETCH moncurseur INTO var1, var2, var3" => permet donc de stocker la valeur des champs sélectionnés dans ton SELECT dans les variables de ton code prévues pour.

Voilà...

DaMonkey
DaMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h18.


 
 
 
 
Partenaires

Hébergement Web