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

Administration Oracle Discussion :

supprimer les données dans une table(mère) et dans les tables en dessous(filles)


Sujet :

Administration Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 76
    Points : 48
    Points
    48
    Par défaut supprimer les données dans une table(mère) et dans les tables en dessous(filles)
    Salut à tous,

    je veux supprimer les données dans une table (mère), dans les tables filles en dessous (117 au total) , dans les tables en dessous des filles et ainsi de suite ...

    A cause des clés etrangères, je dois commencer la suppression d'abord par le plus bas niveau (de l'arbre) pour remonter à la table mère. Car les contraintes clés etrangères n'ont pas été créées avec l'option CASCADE).

    j'utilise ORACLE 9i.

    Ma question: Comment faire pour avoir la liste des tables en dessous de la table mère (filles, filles des filles et ainsi de suite ....) afin de commencer la suppression des données par le bas.

    ou

    Y a-t-il une autre façon de faire?

    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Bonjour,


    Vous pourriez ecrire un TRIGGER au niveau ligne (for each rows before delete) sur la table mere, qui fait la suppression pour l'enregistrement en cours de toutes ces dependances dans les tables filles.

    Comme ca vous ne l'ecrivez qu'une fois et vous pourrez ensuite faire un delete from votreTableMere.

    COMMIT;



    ++

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    modifier les fk pour rajouter cascade me semble plus simple et plus sûr, non ?

  4. #4
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    Merci pour vos réponses.

    Une autre préccupation

    En écrivant le trigger ou en modifiant la pk de la table mère, est qu'en appliquant le DELETE sur la table mère , la suppression s'appliquera sur les tables filles des filles?

    ou il faut écrire aussi le trigger ou modifier la pk pour les tables filles
    .

    Merci d'avance

  5. #5
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Citation Envoyé par monthaldo Voir le message
    En écrivant le trigger ou en modifiant la pk de la table mère, est qu'en appliquant le DELETE sur la table mère , la suppression s'appliquera sur les tables filles des filles?
    Non, seulement sur les filles directes de la table mère, mais pas les filles des filles
    Il faut aussi mettre les fk à "delete cascade" entre les filles et les filles des filles, etc ... récursivement

    Si ta hiérarchie est très complexe avec beaucoup de niveaux, tu peux tenter une requête récursive dans la vue sys.all_constraints pour lister toutes les tables filles de tous les niveaux qui sont rattachées à ta table mère
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par LeoAnderson Voir le message
    modifier les fk pour rajouter cascade me semble plus simple et plus sûr, non ?
    Cascade sûr? surtout pas

    Non, delete cascade est sans doute avec les triggers l'une des choses que j'aime le moins, car on ne sait jamais ce que l'on fait.

    Pour avoir la liste des tables filles, je regarderais dans le dico.

    Ex: tables dont la mère est T1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select distinct table_name 
    from user_constraints 
    connect by r_constraint_name = prior constraint_name or 
      (table_name=prior table_name and 
      constraint_type='P' and 
      prior constraint_type='R') 
    start with table_name='T1';
    TABLE_NAME
    ------------------------------
    T1
    T3
    T2
    T4
    attention, tu risques d'avoir un ORA-1436 si tu as des contraintes en boucles (style tu es ton propre parent). CONNECT BY NOCYCLE règle ce problème en 10g. En 9i, tu peux employer PLSQL ou une approche manuelle (ex: 4 niveaux: la mère, les filles, les filles des filles, les filles des filles des filles)

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Comme ceci ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    en fait c'est l'inverse, monthaldo voulait avec la table grand mère avoir toutes les filles et non depuis les filles avoir toutes les grand mères.

    Ton script vérifie que C.TABLE_NAME <> NVL( LC$OldTable,'1' ), afin de ne pas boucler, mais avec T1(x primary key, y references T2) et T2(x reference T1, y primary key), ça boucle quand même.

    Et moi j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    C:\> sqlplusw.exe user/pwd@base @reference.sql nom_table nom_schema
    'sqlplusw' is not recognized as an internal or external command,
    operable program or batch file.
    bon, c'est sans doute parceque SQLPLUSW n'existe plus dans le client 11g

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    bon, c'est sans doute parceque SQLPLUSW n'existe plus dans le client 11g
    Sans dec ?!!! ils l'ont ablationné !???
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    c'est clair, plus de sqlplusw ni de isqlplus.
    Il reste sqlplus MS-DOS et sqldeveloper

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ils poussent à la conso de Sql*Developer...
    et comment y font les lignesdecommandiens ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  12. #12
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    j'ai discuté à OpenWorld avec Sue Harper, la cheffe de projet de SQL Developer, je lui ai demandé pourquoi ça s'appelait SQL Developer, si les DBA devaient aussi employer cet outil...

    SQL Developer est plutôt pour les développeurs. Alors que nous reste-t-il?

    La commande DOS? Bon, de toute façon tout le monde est en USASCII7, donc pas de problème pour les accents

  13. #13
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    j'ai discuté à OpenWorld avec Sue Harper, la cheffe de projet de SQL Developer, je lui ai demandé pourquoi ça s'appelait SQL Developer, si les DBA devaient aussi employer cet outil...

    SQL Developer est plutôt pour les développeurs. Alors que nous reste-t-il?

    La commande DOS? Bon, de toute façon tout le monde est en USASCII7, donc pas de problème pour les accents
    Tora est pas mal... enfin sous Linux car sous Windows, j'ai pas réussi à l'utiliser plus de 5 min sans que ça ne plante tout !

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Sans dec ?!!! ils l'ont ablationné !???
    oui

    c'est à n'y rien comprendre dans la politique d'Oracle

  15. #15
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Sans dec ?!!! ils l'ont ablationné !???
    ça me choque pas...

    Sous Linux/Unix, il n'y a pas de "x sqlplus", il n'y a que le programme console... ça uniformise, enlève une verrue qui en plus, n'était pas inoubliable !

Discussions similaires

  1. Réponses: 170
    Dernier message: 12/08/2009, 08h56
  2. Réponses: 4
    Dernier message: 02/05/2009, 17h56
  3. Réponses: 8
    Dernier message: 14/12/2007, 16h04
  4. Réponses: 5
    Dernier message: 16/07/2007, 10h14
  5. Réponses: 5
    Dernier message: 23/08/2006, 19h42

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