Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2007, 08h03   #1
Futur Membre du Club
 
Inscription : mai 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 74
Points : 17
Points : 17
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
monthaldo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 08h53   #2
Invité régulier
 
Inscription : mai 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 33
Points : 7
Points : 7
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;



++
stephDeZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 09h08   #3
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
modifier les fk pour rajouter cascade me semble plus simple et plus sûr, non ?
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 11h05   #4
Futur Membre du Club
 
Inscription : mai 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 74
Points : 17
Points : 17
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
monthaldo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 14h52   #5
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 15h13   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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 :
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)
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 15h54   #7
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 16h27   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 18h07   #9
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 19h50   #10
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
c'est clair, plus de sqlplusw ni de isqlplus.
Il reste sqlplus MS-DOS et sqldeveloper
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 19h59   #11
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 20h15   #12
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 20h43   #13
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
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 !
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 22h28   #14
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2007, 07h47   #15
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Citation:
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 !
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h34.


 
 
 
 
Partenaires

Hébergement Web