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 30/03/2005, 12h24   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 45
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 45
Points : 13
Points : 13
Par défaut currval, nextval avec postgresql 7.3??

Bonjour,
j'utilise postgresql 7.3.

J'ai créer une table avec un champ de type serial en clé primaire. j'aimerai apres une insertion recuperer la valeur de la clé primaire. J'ai essayé basiquement avec un select mais à chaque fois cela me retournais Resource id #4.

J'ai donc fais des recherches et constaté que c'etait des sequences. On peut les manipuler à l'aide de fonction tels que currval ou nextval (j'ai trouvé l'aide ici notamment http://dgriessinger.developpez.com/p...sql/sequences/)

Avec currval j'ai l'erreur suivante : Warning: pg_query() query failed: ERROR: anciens_eleves_num_el_seq.currval is not yet defined in this session in...
j'ai bien appellé ma sequence nomtable_nomcol_seq!

J'ai essayé avec nextval et il me retourne encore Resource id #4.

Qu'est ce que j'ai oublié? Problème de version? Aidez moi svp, merci
Avez vous d'autres solutions
imer5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 13h19   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Citation:
Avec currval j'ai l'erreur suivante : Warning: pg_query() query failed: ERROR: anciens_eleves_num_el_seq.currval is not yet defined in this session in...
j'ai bien appellé ma sequence nomtable_nomcol_seq!

J'ai essayé avec nextval et il me retourne encore Resource id #4.
Effectivement avec un type SERIAL, il est très difficile ensuite de récupérer l'ID inséré, pour pouvoir utiliser currval il faut au préalable avoir utiliser nextval, Si tu veux récupérer ton ID après insertion, il va falloir modifier ta table comme ci dessous.

Code :
1
2
3
4
5
nom_colonne SERIAL,
 
en 
 
nom_colonne NOT NULL DEFAULT NEXTVAL('nom_table.nomcolonne.seq'),
ensuite en utilisant currval, tu pourras récupérer ta valeur de l'ID pour la session en cours

KrysKool
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 13h22   #3
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Bonjour et merci d'avoir lu mon tuto

je n'ai peut etre pas assez expliquer dedans qu'il faut pour que les fonctions marches , un nextval soit appellé dans la meme session.
Sinon l'appel à la fonction se fait :
Code :
SELECT currval('anciens_eleves_num_el_seq');
peux tu poster ta requete complete stp
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 14h29   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 45
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 45
Points : 13
Points : 13
j'ai fait un insert into et je voudrais recuperer le numero de la clé que serial a attribué.
Dans la fonction que j'ai crée pour executer mes requete j'ai fais ceci
SELECT nextval('anciens_eleves_num_el_seq')
et à l'affichage j'obtiens ceci
Resource id #4

qu'est ce que tu veux savoir de plus sur ma requete?
imer5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 14h35   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 45
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 45
Points : 13
Points : 13
j'utilise phpPgAdmin et ma colonne à déja pour défaut
nextval('public.anciens_eleves_num_el_seq'::text)?

Que dois je faire désormais? Un grand merci
imer5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 14h57   #6
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Pour recupperer la valeur c'est la fonction currval, celle que tu utilise est nextval
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2005, 16h28   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 45
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 45
Points : 13
Points : 13
Merci hpalpha ton article sur les sequences m'avait bien aidé j'avais seulement une autre petite erreur
imer5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h04.


 
 
 
 
Partenaires

Hébergement Web