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 :

Erreur ajout valeur dans une table


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Erreur ajout valeur dans une table
    Bonjour,
    voila j ai cree une table detaillivraison
    je veux inserer des valeur mais je recoi une erreur



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> CREATE TABLE DetailLivraison
    2 (noLivraison INTEGER NOT NULL,
    3 noCommande INTEGER NOT NULL,
    4 noArticle INTEGER NOT NULL,
    5 quantitéLivrée INTEGER NOT NULL,
    6 PRIMARY KEY (noLivraison, noCommande),
    7 FOREIGN KEY (noLivraison) REFERENCES Livraison,
    8 FOREIGN KEY (noCommande, noArticle) REFERENCES LigneCommande);
    Table créée.

    SQL>
    SQL> insert into detaillivraison values (1,1,1,1);
    insert into detaillivraison values (1,1,1,1)
    *
    ERREUR à la ligne 1 :
    ORA-02291: violation de contrainte d'intégrité (SCOTT.SYS_C005456) - clé parent
    introuvable



    voila toute les table crees

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    CREATE TABLE Client
    (noClient INTEGER NOT NULL,
    nomClient VARCHAR(20) NOT NULL,
    noTéléphone VARCHAR(15) NOT NULL,
    PRIMARY KEY (noClient)
    )
     
    CREATE TABLE Article
    (noArticle INTEGER NOT NULL,
    description VARCHAR(20) NOT NULL,
    prixUnitaire DECIMAL(10,2) NOT NULL,
    quantitéEnStock INTEGER NOT NULL,
    PRIMARY KEY (noArticle))
     
    CREATE TABLE Commande
    (noCommande INTEGER NOT NULL,
    dateCommande DATE NOT NULL,
    noClient INTEGER NOT NULL,
    PRIMARY KEY (noCommande),
    FOREIGN KEY (noClient) REFERENCES Client
    )
     
    CREATE TABLE LigneCommande
    (noCommande INTEGER NOT NULL,
    noArticle INTEGER NOT NULL,
    quantité INTEGER NOT NULL,
    PRIMARY KEY (noCommande, noArticle),
    FOREIGN KEY (noCommande) REFERENCES Commande,
    FOREIGN KEY (noArticle) REFERENCES Article
    )
     
    CREATE TABLE Livraison
    (noLivraison INTEGER NOT NULL,
    dateLivraison DATE NOT NULL,
    PRIMARY KEY (noLivraison)
    )
     
    CREATE TABLE DétailLivraison
    (noLivraison INTEGER NOT NULL,
    noCommande INTEGER NOT NULL,
    noArticle INTEGER NOT NULL,
    quantitéLivrée INTEGER NOT NULL,
    PRIMARY KEY (noLivraison, noCommande, noArticle),
    FOREIGN KEY (noLivraison) REFERENCES Livraison,
    FOREIGN KEY (noCommande, noArticle) REFERENCES LigneCommande)
    merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Points : 344
    Points
    344
    Par défaut
    Salut,
    Il faudrait voir a quelle foreign key correspond la contrainte SCOTT.SYS_C005456, mais a priori ton insert contient un(des) ID(s) qui n'existe(nt) pas dans la table Livraison et/ou LigneCommande.

    Pour info (Et que les experts oracle me corrigent s'il vous plait !) quand je cree des tables avec des cle etrangeres ou primaires je prefere utiliser des noms precis pour les contraintes et une ecriture comme suit en prenant ta table DetailLivraison:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE DETAILLIVRAISON (
    	...,
    	CONSTRAINT DETAILLIVRAISON_PK1 PRIMARY KEY (NOLIVRAISON, NOCOMMANDE,
      CONSTRAINT DETAILLIVRAISON_FK1 FOREIGN KEY (NOLIVRAISON) REFERENCES LIVRAISON(NOLIVRAISON),
      CONSTRAINT DETAILLIVRAISON_FK2 FOREIGN KEY (NOCOMMANDE, NOARTICLE) REFERENCES LIVRAISON(NOCOMMANDE, NOARTICLE));
    ca facilite la lecture des message d'erreurs comme ceux que tu as.

    ---
    Farid

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    A mon avis, et pour suivre Farid sur son explication, tu as carrément oublié de renseigner les tables de référence (Livraison et LigneCommande). Il faut d'abord alimenter les tables de référence et ENSUITE alimenter les tables qui s'y réfèrent (via une clé étrangère).

    Donc pour toi ça sera dans cet ordre :
    insert into Livraison ...
    insert into Articles ...
    insert into Client ...
    insert into Commande ...
    insert into LigneCommande ...
    insert into DétailLivraison ...

Discussions similaires

  1. ajouter une valeur dans une table foxpro en delphi
    Par reuqnas dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/05/2014, 12h29
  2. Réponses: 1
    Dernier message: 04/02/2014, 16h14
  3. Réponses: 5
    Dernier message: 11/10/2010, 09h16
  4. Réponses: 6
    Dernier message: 08/04/2010, 10h32
  5. Test d'existence d'une valeur dans une table
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 29/12/2004, 10h38

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