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 25/09/2005, 14h44   #1
Inscrit
 
Inscription : décembre 2004
Messages : 317
Détails du profil
Informations personnelles :
Âge : 23
Localisation : Singapour

Informations forums :
Inscription : décembre 2004
Messages : 317
Points : 437
Points : 437
Par défaut [transaction] variables ?

Bonjour,

La question est très simple : j'aimerais utiliser des var ou équivalent dans une transaction.

Je veux dire, je fais un insert suivi de plusieurs updates. Et dans les update, j'ai besoin de la dernière valeur de la séquence de la table de l'insert.

Mais je sais pas si c'est très génial de faire dans chaque update une sous requete 'SELECT last_value FROM table_col_seq'. Disons que je préférerai le faire qu'une seule fois pour tous les updates.

Ou alors je me prend la tête pour rien et faire une sous-requete à chaque update ne coute rien ?

Merci de vos avis
winzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2005, 19h38   #2
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

je te déconseille formellement le SELECT last_value FROM table_col_seq ; manipule les séquences avec les fonctions dédiées comme currval (voir le tutoriel de hpalpha sur les séquences pour plus d'infos)

Le scénario typique est :
1) Tu démarres ta transaction
2) Tu fais ton insert
3) Tu récupères la valeur courante de la séquence avec currval
4) Tu te sers de cette valeur pour tes update
5) Tu termines ta transaction

Sache cependant que si tu fais un rollback, le numéro généré par la séquence est quand même irrémédiablement perdu.
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2005, 20h56   #3
Inscrit
 
Inscription : décembre 2004
Messages : 317
Détails du profil
Informations personnelles :
Âge : 23
Localisation : Singapour

Informations forums :
Inscription : décembre 2004
Messages : 317
Points : 437
Points : 437
Merci mais

Pour le currval, je ne l'utilise pas parce qu'il ne marche pas en fait :p
INSERT INTO table...;
SELECT currval('table_col_seq');
-> ERREUR: currval de la séquence «table_col_seq» n'est pas encore définie dans cette session
Donc du coup je m'étais reporté sur le SELECT last_value.. Si t'as une idée je suis preneur

Et plus spécifiquement pour mon problème, là où je bloque c'est :
3) Tu récupères la valeur courante de la séquence avec currval
4) Tu te sers de cette valeur pour tes update
Je ne sais pas récupérer, puis réutiliser cette valeur justement, là est la question ^^ J 'ai beau cherché j'ai rien vu qui s'en approchait. Je dois pas chercher au bon endroit surement O_°

Encore merci
winzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2005, 07h28   #4
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
Dans la partie 2 tu fais ton INSERT avec nextval('table_col_seq') et ensuite tu pourra utiliser currval('table_col_seq'). C'est la seule méthode en transactionnel qui te permette de récupéré la bonne valeur de séquence et non pas celle d'une autre transaction en cours.

KrysKool.
kryskool 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 00h33.


 
 
 
 
Partenaires

Hébergement Web