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 :

Tronquer une table liée par des clés étrangères


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut Tronquer une table liée par des clés étrangères
    Bonjour à tous;

    J'ai une base suivant un modèle entité association, je veux tronquer une des tables afin de la remplir par les données d'un fichier .csv avec SQL*LOADER. Mais lorsque je veux la tronquer il m'envoie cette erreur :
    ORA-02266: les clés primaires/uniques de la table sont référencées par des clés étrangères
    Alors j'ai essayé de désactiver les clés de cette table SS_ACTIVITE, avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table ss_activite disable constraint PK_SS_ACTIVITE;
    Hélas il m'envoie cette erreur :
    ORA-02297: impossible désactiver contrainte BDPBCADMIN.PK_SS_ACTIVITE - les dépendences existent
    Quelqu'un pourrait m'aider ?

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Les données de ta table sont referencés par d'autres tables en tant que clés étrangères.

    Ce sont les Foreign Key des tables dependantes que tu dois desactiver pour pouvoir faire ton truncate.

    Toutefois si tu inseres moins de valeurs que celles precedememnt stockées (des PK_ID reférencés dans tes tables dependantes qui ne serait pas ré-insérés) tu ne pourras pas ré-activer les contraintes

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Si ta table fille est vide, utilise un DELETE (certes plus long) qui ne te forcera pas à désactiver les contraintes.

    Si elle n'est pas vide, pourquoi vouloir truncater la table mère ?

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut Merci pour la réponse
    Bonjour,

    En fait je vais vous expliquer le schéma de la base: J'ai une table activité en relation avec une table ss_activité: Donc une ss_activité appartient à 1e seule activité, alors qu'une activité pourrait avoir de 1 à n sous activité. Je sais pas quoi désactiver?? donc pour la table activité, elle n'a pas de FK, mais la table ss_activité elle a un seul FK hérité de la table mère activité.
    Pour répondre à ta question, je charge mes données par SQL*LOADER, et pour l'utiliser il faut que la table à recharger soit vide!

    PS: J'ai d'autres tables dans mon modèle, je me suis dis peut être les tables sont interdépendantes et du coup je pourrais pas désactiver une seule clé à la fois.
    Pourrais je verrouiller et déverrouiller toutes les tables?

    Aide SVP

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    il y a d'autre tables qui pointent sur ta table à tronquer par des clé étrangères, ce sont elles qu'il faut désactiver/réactiver.


    pour les trouver tu peux faire la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from USER_CONSTRAINTS 
    where constraint_type = 'R' 
    and R_CONSTRAINT_NAME = 'PK_SS_ACTIVITE'
    (je cherche toutes les FK qui pointent sur ma PK 'PK_SS_ACTIVITE')

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour désactivez c'est simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE ss_activite disable constraint PK_SS_ACTIVITE cascade;
    Mais pour réactiver ce n'est plus la même musique.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Citation Envoyé par hazem2410 Voir le message
    Pour répondre à ta question, je charge mes données par SQL*LOADER, et pour l'utiliser il faut que la table à recharger soit vide!
    Vous pouvez tout à fait avoir une table sas qui contient les données de votre nouveau fichier (une table externe par exemple si vous êtes en 10g+), et mettre à jour depuis celle-ci votre table activité (avec un merge, toujours par exemple).

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut Merci
    Citation Envoyé par mnitu Voir le message
    Pour désactivez c'est simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE ss_activite disable constraint PK_SS_ACTIVITE cascade;
    Mais pour réactiver ce n'est plus la même musique.
    ça a marché
    en fait pour réactiver il suffit de mettre enable à la place de disable et d'enlever cascade

    Merci bcp pour ta coopération

  9. #9
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Avez vous regardez le statut des clés étrangères dépendantes de votre clé primaire après avoir réactivé celle-ci ?

  10. #10
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    en fait pour réactiver il suffit de mettre enable à la place de disable et d'enlever cascade
    Non, car le cascade a pu désactiver d'autres contraintes (toutes les KF qui référencent cette clé primaire par exemple)
    Il faut voir dans user_constraints toutes les contraintes qui sont DISABLED.
    Cordialement,
    Franck.

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par pachot Voir le message
    Non, car le cascade a pu désactiver d'autres contraintes (toutes les KF qui référencent cette clé primaire par exemple)
    Alors comment pourrais je réactiver ??

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par pachot Voir le message
    Il faut voir dans user_constraints toutes les contraintes qui sont DISABLED.
    Merci beaucoup pour ta remarque, j'ai trouvé toutes les contraintes désactivées suite au mot cascade et je les ai réactivées

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

Discussions similaires

  1. [MySQL] problème d'insertion dans des tables qui contiennent des clés étrangère
    Par shurik'n dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/04/2012, 22h32
  2. modéliser une table mapping ayant des clés étrangères sur des vues
    Par touftouf57 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 19/06/2010, 03h04
  3. Réponses: 2
    Dernier message: 06/04/2010, 16h17
  4. Réponses: 2
    Dernier message: 08/09/2009, 12h57
  5. Réponses: 5
    Dernier message: 05/10/2006, 20h07

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