IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

[transaction] variables ?


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    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

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    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

  4. #4
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Par défaut
    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.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2009, 14h21
  2. Réponses: 2
    Dernier message: 01/07/2009, 10h33
  3. Must Declare the scalare variable - Transact SQL
    Par xav13fr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/07/2008, 10h41
  4. [Transact SQL] Setter une variable avec une procédure stockée
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 17/06/2008, 17h58
  5. Transact Sql : Conversion de variable
    Par lord_paco dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/08/2003, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo