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

Langage SQL Discussion :

supprimer une ligne avec cle etrangere


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [RESOLU] supprimer une ligne avec cle etrangere
    Bonjour tout le monde,

    voila g cree une table ou g trois cles etrangeres.
    Je veux supprimer une ligne dans une des tables qui contiennent les references de ces cles etrangeres.
    Pour etre plus clair, c est une table historique, donc par exemple quand je cree un element ca cree une ligne dans l historique et une ligne dans ma table element.
    et la cle primaire de ma table element est la cle etrangere de ma table historique.

    Je peux supprimer dans ma table historique mais pas l element dans ma table ELEMENT ; il me dit :

    ORA-02292: integrity constraint RI_RISE_ADM.FK_RI_CR_TREE_INFO_TREE) violated
    - child record found

    g lu dans les erreurs oracle qu'il fallait que j update ou que je delete ma cle etrangere!!!!

    y a pas moyen d effacer cette ligne ??

    Merci de me eclairer (je suis pas tres doue en SQL!)

    Bastien
    Bastien

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    L'erreur te dis que la ligne que tu tentes d'effacer est encore reference par un autre enregistrement?
    Tu ne peux pas effacer un enregistrement qui est toujours referencé.
    Efface d'abord cet enregistrement et ensuite efface ta ligne.
    Ou alors, tu peux toujours mettre un On delete Cascade.

    Voila, j'espere que cela t'aide

  3. #3
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    l'erreur vient en effet de tes clés étrangères, a cause de l'intégrité relationnelle :
    si tu stocke des villes et leur pays ... est il normal de pouvoir enlever un pays de la liste , alors que certaines villes sont dans ce pays. Toute ville ayant un pays, il faut bien faire disparaitre les villes avant de faire disparaitre le pays

    c'est le meme problème pour toi.

    pour régler le probleme , deux solutions :
    • La méthode 'a la main' : a chaque suppression de ta ligne référencée, tu fais des requetes supplémentaires pour supprimer toutes les lignes y faisant référence. dans le cas des villes et pays, tu demande la suppression de toutes les villes du pays avant de supprimer le pays

    • la méthode automatique : tu utilises la propriété "ON DELETE" de ta relation. Ainsi , le SGBD s'occupe de tout. dans le cas d'un ON DELETE CASCADE, par exemple, la suppression du pays entraine automatiquement la suppression des villes correspondantes


    pour plus de précision, va lire la doc de SQLpro

    au passage, bien que la solution de l'automatisation par "on delete" soit plus simple , elle est aussi beaucoup moins sécurisée, car une suppression accidentelle n'est pas bloquée, mais cascadée, ses effets pouvant donc etre décuplés...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Voyon si j'ai compris ce que tu veux faire:
    Tu as une table element avec comme clé primaire mettons cle_elem, tu as une table hist_elem qui est une table qui historise des informations concernant l'élément, ta table hist a un champ cle_elemh qui est une clé étrangère de clé_eleme de la table element.
    et tu veux supprimer un enregistrement de ta table element, sans supprimer la ligne de hist_elem.
    Pour résoudre ton problème, je vois deux solutions
    a/
    Il semble que le champ clé_elemh de la table hist_elem, ne devrait pas être clé étrangère du champ cle_elem de la table element.
    Donc supprime ta contraintre de clé étrangère de la table hist_elem, mais fais attention après dans tes requete, tu ne pourras plus faire de jointure entre hist_elem et element, ou plutot la jointure risque de ne pas te ramener ce que tu veux,et donc tu risque de perdre des informations (désignations, type etc)
    b/ Tu fais de la suppression logique et pas physique, c'est à dire que tu rajoutes un champ supprimer oui/non, et tu modifies ce flag à la place de la suppression physique du champ.
    Avantage tu gardes ta clé étrangère, et la possibilité de faire des jointures avec la table hist_elem, inconvénient, il faut que dans tous tes traitements, select ,update , etc... tu rajoutes un where supprimer=Non.

    A toi de voir si j'ai compris ton problème et dans ce cas, quelle solution est la plus indiquée.
    A+
    Soazig

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    ok merci

    je pense avoir bien compris.

    je vais commencer a faire a la main et je me creerai quelques tables pour tester le On Delete Cascade sans risques!
    Bastien

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

Discussions similaires

  1. [MySQL] Supprimer une ligne avec un checkbox
    Par Budy123 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/02/2020, 11h25
  2. supprimer une ligne avec macros
    Par czied dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/03/2009, 10h25
  3. Réponses: 5
    Dernier message: 13/02/2009, 14h52
  4. Comment supprimer une ligne de la listbox avec le bouton 'suppr'
    Par florent64 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/06/2007, 17h25
  5. Réponses: 4
    Dernier message: 19/03/2007, 09h57

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