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

SQL Oracle Discussion :

Problème clé étrangère (Foreign Key)


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Par défaut Problème clé étrangère (Foreign Key)
    Bonjour,

    Voila j'ai un problème de clé étrangère dans une table RAYON.

    Lorsque j'essaye d’intégrer des données j'ai l'erreur suivante qui apparaît:
    ORA-02291: violation de contrainte d'intégrité (LR.FK_RAYON_ID_MAGASIN) - clé parent introuvable


    Dans un premier j'alimente bien la table magasin avec l'ID_MAGASIN puis je viens alimenter la table rayon avec un ID_RAYON et la clé étrangère ID_MAGASIN

    Je voudrais que l'on m'éclair sur le problème que j'ai.


    Voici mon code SQL:

    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
    insert  into LAR2.PLAN_OPERATION
    (  "USAGE",
    REPEAT_STEP,
    ID_RAYON,
        ID_MAGASIN
    CREATION_DATE,
    LAST_UPDATE_DATE,
    CREATED_BY,
    LAST_UPDATE_BY,
    )
    select "USAGE",
    REPEAT_STEP,
    ID_RAYON,
        ID_MAGASIN
    CREATION_DATE,
    LAST_UPDATE_DATE,
    CREATED_BY,
    LAST_UPDATE_BY,
    from lR.RAYON.I_PLAN_OPERATION

    Merci d'avance pour l'aide que vous m'apporterez

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Tu peux expliquer à quoi correspond lR.RAYON.I_PLAN_OPERATION? Il y a deux point donc une hiérarchie de 3 niveaux. lr est quoi : un schéma, une base? RAYON est quoi : un schéma, une base? I_PLAN_OPERATION est quoi : une table?

    Sinon il faudrait faire un SELECT dans DBA_CONSTRAINTS pour voir le contenu de la contrainte qui pose pb.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM DBA_CONSTRAINTS
    WHERE OWNER = 'LR' AND CONSTRAINT_NAME = 'FK_RAYON_ID_MAGASIN';

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 237
    Par défaut
    Dans ta requête , il n'y a pas de virgule entre id_magasin et le champ suivant.

    Soit ta requête (la vraie) est légèrement différente de celle-ci, et c'est une erreur de copier/coller, soit c'est réellement ta requête, et à coup sur, c'est la cause du problème.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Par défaut Problème résolu
    Bonjour,

    J'ai trouvé le problème que j'avais.

    C'est tout simplement que dans les règle de gestion qui avait été mise en place dans la table magasins, il y'avait une contrainte de clé primaire UNIQUE.

    Du coup j'ai supprimé cette contrainte de clé primaine UNIQUE pour ne plus avoir ce problème

    En tout cas merci pour vos réponses !

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Si le pb est résolu c'est bon.
    En revanche, deux petites précisions :
    - une clé primaire est toujours unique
    - ce que tu as supprimé c'est la clé primaire de ta table ou bien une clé unique? Dans le premier cas, tu vas te retrouver avec une table sans clé primaire et c'est en général très fortement déconseillé

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Par défaut
    Non j'ai gardé la clé primaire, j'ai tout simplement spécifié qu'il ne fallait plus qu'elle soit unique en supprimant cette contrainte

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 237
    Par défaut
    En d'autres mots : il y avait un garde-fou qui t'empêchait de sauter dans le vide, et tu as choisi de supprimer le garde-fou.

    C'est ton choix.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Par défaut
    Voila c'est tout a fait ça

  9. #9
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Citation Envoyé par Cookingya Voir le message
    Non j'ai gardé la clé primaire, j'ai tout simplement spécifié qu'il ne fallait plus qu'elle soit unique en supprimant cette contrainte
    Euh, j'avoue ne pas comprendre comment tu as pu faire ça.
    Tu peux m'expliquer?

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Par défaut
    En fait sous SQL quand tu crée une clé primaire cette dernière contient automatiquement une contrainte UNIQUE, ce qui signifie que tu ne peux pas rentrer des lignes en doublons au niveau de ta PK.

    Si tu enlève cette contrainte "UNIQUE" c'est à dire tu mets ta clé primaire en "NON UNIQUE" et bien tu peux rentrer des données en doublons.

    Dans mon cas, je devais insérer des ID en doublons, donc il fallait que je modifie la contrainte de ma clé primaire en "NON UNIQUE" pour pouvoir insérer des données.

  11. #11
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Je ne vois toujours pas comment tu as fais.

    Voici mon code où je crée une table avec une PK. Impossible de mettre deux fois la même valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> create table ZZ01 (ID NUMBER(3) PRIMARY KEY);
    Table created.
     
    SQL> insert into ZZ01 values (1);
    SQL> insert into ZZ01 values (2)
    SQL> insert into ZZ01 values (1)
    *
    ERROR at line 1:
    ORA-00001: unique constraint (HR.SYS_C007901) violated
    Impossible de mettre une contrainte PK et UNIQUE à la fois; je pensais que c'était peut être ça l'astuce.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> create table ZZ02 (ID NUMBER(3) UNIQUE PRIMARY KEY);
    create table ZZ02 (ID NUMBER(3) UNIQUE PRIMARY KEY)
                                           *
    ERROR at line 1:
    ORA-02259: duplicate UNIQUE/PRIMARY KEY specifications

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 24
    Par défaut
    Tu peux modifier ton code en testant cela peut-etre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create table ZZ02 (ID NUMBER(3) NON_UNIQUE PRIMARY KEY);
    create table ZZ02 (ID NUMBER(3) NON_UNIQUE PRIMARY KEY)
    Ou sinon tu vas directement dans les paramètre de la table ---> Index--> tu as un onglet ou tu peux le type de l'index et tu change ton index en non_unique, mais tu risquera de perdre tes données par la suite.

    Voici une capture d'écran qui te montre où tu dois aller pour changer l'index de ta PK
    Nom : Capture.PNG
Affichages : 1364
Taille : 25,7 Ko

  13. #13
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Bonjour,

    D'abord le code SQL que vous suggérez d'essayer est une erreur de syntaxe. Ou alors nous ne sommes pas sur Oracle.

    Ensuite, je constate dans votre capture d'écran que vous êtes en train de créer un INDEX UNIQUE, et non une CONTRAINTE UNIQUE, et encore moins une CONTRAINTE PRIMARY KEY. Notons que les contraintes UNIQUE et PRIMARY KEY peuvent reposer sur un index qui n'est pas unique et peuvent être en mode DEFERRED, où effectivement, l'unicité n'est vérifiée qu'au moment du commit, et donc, on peut effectivement avoir temporairement des doublons, qui devront être résolus au moment de valider la transaction.

  14. #14
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Citation Envoyé par Baldrick Voir le message
    D'abord le code SQL que vous suggérez d'essayer est une erreur de syntaxe. Ou alors nous ne sommes pas sur Oracle.
    Je confirme, pb de syntaxe. En outre je ne trouve pas dans la doc Oracle une référence à NON_UNIQUE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> create table ZZ02 (ID NUMBER(3) NON_UNIQUE PRIMARY KEY);
    create table ZZ02 (ID NUMBER(3) NON_UNIQUE PRIMARY KEY)
                                    *
    ERROR at line 1:
    ORA-00907: missing right parenthesis

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/10/2010, 11h32
  2. Problème avec une FOREIGN KEY
    Par spiner900 dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/03/2009, 14h31
  3. probléme dans les foreign key
    Par infomari dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/07/2007, 15h44
  4. [Firebird] Création de clé étrangère - FOREIGN KEY
    Par Vincent BONNAL dans le forum SQL
    Réponses: 3
    Dernier message: 05/08/2005, 16h49
  5. Clé étrangère - Foreign Key
    Par ZIED dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/02/2004, 16h57

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