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

Requêtes PostgreSQL Discussion :

Problème de récupération d'id nouvellement créé


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut Problème de récupération d'id nouvellement créé
    Bonjour,

    Voilà j'ai une procédure stockée qui gère l'insertion dans une table, et j'aimerais récupérer l'id nouvellement créé dans mon application, j'ai donc pensé à créer une 2nde procédure stockée pour ça mais à l'exécution j'ai cette erreur :

    "currval of sequence "tbl_bien_bien_id_seq" is not yet defined in this session"
    J'ai du mal à comprendre pourquoi, parce que je ne suis pas dans la même transaction ? Dois-je modifier la première procédure stockée ?

    Voici le code de récupération de l'id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from get_valeur_courante_sequence_bien() 
    as (valeurCourante bigint);

    Merci d'avance pour vos réponses

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut Complément d'information
    Voici le code de la procédure stockée get_valeur_courante_sequence_bien() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION get_valeur_courante_sequence_bien()
      RETURNS SETOF record AS
    $BODY$
        select currval('tbl_bien_bien_id_seq');
    $BODY$
      LANGUAGE 'sql' VOLATILE
      COST 100
      ROWS 1000;
    ALTER FUNCTION get_valeur_courante_sequence_bien() OWNER TO postgres;

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    "currval of sequence "tbl_bien_bien_id_seq" is not yet defined in this session"

    J'ai du mal à comprendre pourquoi, parce que je ne suis pas dans la même transaction ?
    Non ce n'est pas lié aux transactions, mais pour pouvoir demander le currval d'une séquence, il faut avoir demandé le nextval avant (avoir avancé la séquence), au moins une fois dans la session. Quand ce n'est pas le cas, l'erreur ci-dessus se produit.

    Du point de vue de l'architecture du code, ce n'est pas une bonne idée de diviser ce problème en deux fonctions puisque la deuxième fonction est inutilisable sans la première.

    Voir aussi INSERT... RETURNING.. qui est peut-être plus approprié pour tout faire en une seule instruction.

Discussions similaires

  1. [TIBSQL] Problème de récupération d'un champs
    Par TitiFr dans le forum Bases de données
    Réponses: 6
    Dernier message: 07/08/2005, 13h33
  2. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  3. Réponses: 8
    Dernier message: 12/05/2005, 08h16
  4. Nouveau problème de récupération de valeurs.
    Par pmboutteau dans le forum ASP
    Réponses: 4
    Dernier message: 09/03/2005, 10h48
  5. Problème de récupération de texte de formulaire
    Par bigourson dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2004, 16h27

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