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 :

[Sql]Récupération clé primaire


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut [Sql]Récupération clé primaire
    Bonjour à tous,

    j'ai une procédure stockée qui m'insére deux enregistrements dans deux tables différentes avec une clé entre les deux.
    Mon problème est que je n'arrive pas à récupérer la clé primaire de la première table opur l'insérer en tant que clé étrangère dans la seconde table.

    Connaissez-vous un moyen de récupérer cette clé ?

    Merci pour votre aide

  2. #2
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Bonjour,
    Comment se fait-il que tu ne connaisse pas la valeur de la PK que tu insères dans la première table ? Peux-tu nous montrer un bout de code ?

  3. #3
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    Voici mon code de la procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    CREATE PROCEDURE Test
    (
       nomclient IN NVARCHAR2,
       montantfacture IN INTEGER
    )
    IS
    BEGIN
       INSERT INTO Client ("ID",
                                  "NomClient")
                      VALUES (ClientID.NEXTVAL,
                                  nomclient);
     
       INSERT INTO Facture ("ID",
                                     "montantfacture",
                                     "ClientFK")
                         VALUES (FactureID.NEXTVAL,
                                     montantfacture,
                                     ????);
     
    END;
    Je voulais mettre la valeur de la nouvelle clé client dans le champs ClientFK.
    J'ai essayé en mettant ClientID.CURRVAL mais cela ne fonctionne pas.

  4. #4
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Je n'arrive pas à reproduire le problème, j'ai fais les tests suivants et ça fonctionne (Oracle 8.1.7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CREATE TABLE TEST1
    (
      ID  NUMBER(10)                                NOT NULL
    );
    ALTER TABLE TEST1 ADD (
      CONSTRAINT PK_TEST1 PRIMARY KEY (ID));
     
    CREATE TABLE TEST2
    (
      ID        NUMBER(10)                          NOT NULL,
      ID_TEST1  NUMBER(10)                          NOT NULL
    );
    ALTER TABLE TEST2 ADD (
      CONSTRAINT PK_TEST2 PRIMARY KEY (ID));
    ALTER TABLE TEST2 ADD (
      CONSTRAINT FK_TEST FOREIGN KEY (ID_TEST1) 
        REFERENCES TEST1 (ID));
     
    CREATE SEQUENCE OASISEXP.S_TEST1;
    CREATE SEQUENCE OASISEXP.S_TEST2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE PROCEDURE "P_TEST" IS
    BEGIN
       INSERT INTO test1 ("ID")
                      VALUES (S_TEST1.NEXTVAL);
     
       INSERT INTO test2 ("ID",
                                     "ID_TEST1")
                         VALUES (S_TEST2.NEXTVAL,
                                 S_TEST1.CURRVAL);
       commit;
     
    END;
    /

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CREATE OR REPLACE PROCEDURE "P_TEST_2" IS
     val number;
    BEGIN
       select S_TEST1.NEXTVAL into val from dual;
       INSERT INTO test1 ("ID")
                      VALUES (val);
     
       INSERT INTO test2 ("ID",
                                     "ID_TEST1")
                         VALUES (S_TEST2.NEXTVAL,
                                 val);
       commit;
     
    END;
    /

  5. #5
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    Je te remercie pour ton aide.
    cela fonctionne maintenant,
    je devais avoir une autre erreur.

    merci et désolé du dérangement

  6. #6
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut conseil
    Je te conseille vivement de passer par une variable intermédiaire plutot que d'utiliser le "currval" (3ieme code de chrifo). Car avec le currval, j'aurais un peu peur du niveau d'isolation: Que se passe-t-il si la séquence change entre tes 2 requêtes?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Microsoft SQL Server error: 233
    Par agdid04 dans le forum Administration
    Réponses: 6
    Dernier message: 20/04/2013, 08h42
  2. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  3. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 16h12
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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