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

Oracle Discussion :

Récupérer la clé primaire génerée automatiquement


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut Récupérer la clé primaire génerée automatiquement
    Bonjour à tous,

    Je fais des insertions des lignes dans une table oracle avec une clé primaire (oid) génerée automatique : un trigger qui la prend dans une séquence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE OR REPLACE TRIGGER YY.XX_TRIG BEFORE INSERT ON YY.XX FOR EACH ROW 
    begin
    select XX_seq.nextval into :new.oid from dual;
    end;
    J'aimerais bien de récupérer cette valeur génerée par le trigger chaque fois quand je fais l'insertion. Mais, là je suis un peu perdu ...

    J'ai cherché un peu partout sur le net, ce que j'ai trouvé c'est la solution avec la procedure en utilisant "RETURNING oid INTO xxx". Mais ceci me semble ne marcher pas dans une requête SQL.

    Pouvez vous m'aider sur ce coup là, car je suis vraiement un newbie en SQL.
    Merci beaucoup!!

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    l'idéal c'est de faire l'insert avec NEXTVAL (donc t'utilise pas le trigger) et ensuite tu récupères la valeur CURRVAL

  3. #3
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    ça marche sous SQL*Plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create table aa (a number);
    variable v number
    insert into aa (a) values (1) returning a into :v;
    print v
     
            V
    ---------
            1
    Quel type de client utilises-toi?

    DAB

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    DAB.cz ton exemple ne répond pas au problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE aa (a number, b number);
    variable v number
    INSERT INTO aa (b) VALUES (1) returning a INTO :v;
    print v
    là c'est la valeur de a qui est autoincrémentée qu'il demande

  5. #5
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Citation Envoyé par orafrance Voir le message
    DAB.cz ton exemple ne répond pas au problème
    Mais si:
    ...en utilisant "RETURNING oid INTO xxx". Mais ceci me semble ne marcher pas dans une requête SQL...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Citation Envoyé par orafrance Voir le message
    l'idéal c'est de faire l'insert avec NEXTVAL (donc t'utilise pas le trigger) et ensuite tu récupères la valeur CURRVAL
    Enfait, ce trigger je ne peux pas le toucher, car la base est partagé entre plusieurs applications. Si j'enleve ça, il fallait changer dans les autres ...


  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Citation Envoyé par DAB.cz Voir le message
    ça marche sous SQL*Plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create table aa (a number);
    variable v number
    insert into aa (a) values (1) returning a into :v;
    print v
     
            V
    ---------
            1
    Quel type de client utilises-toi?

    DAB
    Merci DAB,

    En fait, je l'utilise dans une application JAVA. La requête s'execute à travers l'ODBC. J'ai essayé ton script, mais ça ne marche pas. Il me indique erreur de syntax pour "variable xx number". Je pense peut-être qu'il ne supporte pas la declaration de variable...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Citation Envoyé par orafrance Voir le message
    l'idéal c'est de faire l'insert avec NEXTVAL (donc t'utilise pas le trigger) et ensuite tu récupères la valeur CURRVAL
    D'après ta conseil, je pourrais maintenant de le faire en deux requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO table_a (colonne_b) VALUES ('test');
    SELECT TABLE_A_SEQ.CURRVAL FROM dual;
    Merci orafrance !

    Mais est-ce que l'on peut le faire en une seule requête?

  9. #9
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Citation Envoyé par fayndee Voir le message
    erreur de syntax pour "variable xx number"
    Oui, c'est un syntax de SQL*Plus. Tu utiliserais seulement "insert...". Mais désolé, je pense que l'ODBC ne permettra pas cet typ d'ordre.

    DAB

Discussions similaires

  1. comment récupérer la clef primaire
    Par aedius dans le forum PhpMyObject
    Réponses: 2
    Dernier message: 16/01/2008, 23h30
  2. [EJB3 Entity] récuperer la clé primaire génerée automatiquement
    Par berioua dans le forum Java EE
    Réponses: 10
    Dernier message: 22/06/2007, 08h49
  3. Récupérer les clés primaires "perdues"
    Par Dnx dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/07/2006, 17h13
  4. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 13h00
  5. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57

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