|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
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 |
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Inscrit
Inscription : décembre 2004 Messages : 317 ![]() |
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 |
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : janvier 2005 Messages : 336 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com