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 06/12/2007, 09h51   #1
Membre régulier
 
Inscription : août 2006
Messages : 307
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 307
Points : 78
Points : 78
Par défaut [Oracle 10g] Vidage des tables

Salut,

Je travaille sur Oracle 10g et je souhaitais connaitre la meilleure maniere de vider les tables d'un seul user sans effacer rien de la structure.

La colonne TRUNCATE ne vide qu'une seule table, n'est ce pas ?

Merci d'avance

Mario
__________________
Pensez au tag !!!
LP-mpascolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 09h58   #2
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
boucle FOR sur all_tables en filtrant sur le schema, et EXECUTE IMMEDIATE pour désactiver les contraintes et faire le truncate
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 10h11   #3
Membre régulier
 
Inscription : août 2006
Messages : 307
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 307
Points : 78
Points : 78
ca pourrait etre un truc du genre ?
Ca m'efface bien les donnees des tables du user MAP sans effacer rien de la structure ?


Code :
1
2
3
4
5
6
BEGIN
FOR i IN (SELECT * FROM all_tables WHERE owner = 'MAP')
LOOP
EXECUTE IMMEDIATE('TRUNCATE TABLE '||i.table_owner||'.'||i.table_name);
END LOOP;
END;
__________________
Pensez au tag !!!
LP-mpascolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 10h13   #4
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
oui, mais il faut désactiver les contraintes d'abord FAQ
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 10h29   #5
Membre régulier
 
Inscription : août 2006
Messages : 307
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 307
Points : 78
Points : 78
Citation:
Envoyé par orafrance Voir le message
oui, mais il faut désactiver les contraintes d'abord FAQ

Code :
1
2
3
4
5
6
7
8
9
10
BEGIN
FOR i IN (SELECT * FROM all_tables WHERE owner = 'MAP')
LOOP
 
EXECUTE IMMEDIATE('DISABLE NOVALIDATE TABLE '||i.table_owner||'.'||i.table_name);
EXECUTE IMMEDIATE('TRUNCATE TABLE '||i.table_owner||'.'||i.table_name);
EXECUTE IMMEDIATE('ENABLE NOVALIDATE TABLE '||i.table_owner||'.'||i.table_name);
 
END LOOP;
END;
__________________
Pensez au tag !!!
LP-mpascolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 10h36   #6
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
http://oracle.developpez.com/sources...active_fk_user
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 11h11   #7
Membre régulier
 
Inscription : août 2006
Messages : 307
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 307
Points : 78
Points : 78
Ok. j'etais en train de voir ce code en meme temps...

Donc j'execute le code de desactivation des contraintes, tout se passe bien.

Ensuite lorsque j'execute ce code :
Code :
1
2
3
4
5
6
7
BEGIN
FOR i IN (SELECT * FROM all_tables WHERE owner = 'map')
LOOP
EXECUTE IMMEDIATE('TRUNCATE TABLE '||i.table_owner||'.'||i.table_name);
END LOOP;
END;
/
J'ai cette erreur...

Citation:
ERROR at line 4:
ORA-06550: line 4, column 40:
PLS-00302: component 'TABLE OWNER' must be declared
ORA-06550: line 4, column 1
PL/SQL: Statement ignored

Puis enfin, je réactive les contraintes...
__________________
Pensez au tag !!!
LP-mpascolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 11h19   #8
Membre régulier
 
Inscription : août 2006
Messages : 307
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 307
Points : 78
Points : 78
Non en fait, c'est bon...

'||i.table_owner||' dit etre changé par '||i.owner||'

MERCI DE TON AIDE
__________________
Pensez au tag !!!
LP-mpascolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h25.


 
 
 
 
Partenaires

Hébergement Web