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 :

Violation de contrainte d'intégrité


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur BI
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur BI

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 31
    Points
    31
    Par défaut Violation de contrainte d'intégrité
    Bonjour,

    J'ai deux tables à créer sous Oracle.

    Table département :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE dept( 
    DEPTNO NUMBER(2), 
    DNAME CHAR(20), 
    LOC CHAR(20), 
    constraint p1 primary key(deptno), 
    constraint c check( dname in ('ACCOUNTING','RESEARCH','SALLES','OPERATIONS')));
    Table employés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create table emp ( 
    empno number (5), 
    ename varchar (40), 
    job varchar(40), 
    mgr number(5), 
    hiredate date, 
    sal number(6), 
    comm number(6), 
    deptno number(2), 
    CONSTRAINT E_CLEP PRIMARY KEY(EMPNO), 
    CONSTRAINT E_CLET1 FOREIGN KEY(DEPTNO) REFERENCES 
    DEPT(DEPTNO), 
    CONSTRAINT E_CLET2 FOREIGN KEY(MGR) REFERENCES EMP(EMPNO));
    et les données suivantes pour la table dept :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    insert into dept values (10,'ACCOUNTING','NEW-YORK'); 
    insert into dept values (20,'RESEARCH','Dallas'); 
    insert into dept values (30,'SALLES','Chicago'); 
    insert into dept values (40,'OPERATIONS','Boston'); 
    insert into dept values (50,'SALLES','Tunis');
    Jusque là tout va bien, mais le problème survient quand j'essaie d'insérer des données à la table emp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into emp values(7499,'ALLEN','SALESMAN',7698,'20/02/81',160000,30000,30);
    Quand j'exécuté sur SQL*Plus ce message d'erreur s'affiche sur le terminal :
    ORA:02291 : violation de contrainte d'intégrité <base.E_CLET2> clé parent introuvable.
    Merci pour votre aide d'avance.

  2. #2
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Salut,

    Le message est pourtant clair : il ne trouve pas d'employés avec l'identifiant 7698 dans ton INSERT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into emp values(7499,'ALLEN','SALESMAN',7698,'20/02/81',160000,30000,30);
    Il faut donc en premier lieu insérer les Manager pour lesquels le champs MGR sera NULL

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur BI
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur BI

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Bibeleuh Voir le message
    Salut,

    Le message est pourtant clair : il ne trouve pas d'employés avec l'identifiant 7698 dans ton INSERT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into emp values(7499,'ALLEN','SALESMAN',7698,'20/02/81',160000,30000,30);
    Il faut donc en premier lieu insérer les Manager pour lesquels le champs MGR sera NULL
    Merci Bibeleuh
    est-ce que tjr quand j'ai une table que utilise un clé étrangère j'insère tout d'abord les tuples ou j'ai le clé étrangère null?

  4. #4
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    En fait tu as ajouté une contrainte dans ta table EMP sur la colonne MGR , cette colonne doit donc référencer une valeur existante dans ta table.

    Là tu insères 7698 dans la colonne MGR, donc la contrainte va vérifier si l'employé 7698 existe pour pouvoir le référencer.

    Dans ton cas cas cet employé n'a pas encore été inséré d'où l'exception.

    Il faut donc en premier lieu insérer les Manager pour lesquels le champs MGR sera NULL

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur BI
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur BI

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Bibeleuh Voir le message
    En fait tu as ajouté une contrainte dans ta table EMP sur la colonne MGR , cette colonne doit donc référencer une valeur existante dans ta table.

    Là tu insères 7698 dans la colonne MGR, donc la contrainte va vérifier si l'employé 7698 existe pour pouvoir le référencer.

    Dans ton cas cas cet employé n'a pas encore été inséré d'où l'exception.
    j'ai Bien compris
    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2015, 15h00
  2. Réponses: 1
    Dernier message: 06/05/2014, 16h05
  3. ORA-02991 : violation de contrainte d'intégrité
    Par Dadoo1369 dans le forum Oracle
    Réponses: 2
    Dernier message: 10/03/2012, 18h09
  4. [debutant] Contraintes d'intégrité définies sur un objet
    Par maysa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/05/2004, 15h57
  5. Question sur les contraintes d'intégrités
    Par eGGyyS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/04/2004, 14h51

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