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
Version imprimable
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
boucle FOR sur all_tables en filtrant sur le schema, et EXECUTE IMMEDIATE pour désactiver les contraintes et faire le truncate :)
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;
oui, mais il faut désactiver les contraintes d'abord :arrow: 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;
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 :
J'ai cette erreur...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; /
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...
Non en fait, c'est bon... :yaisse2:
'||i.table_owner||' dit etre changé par '||i.owner||'
MERCI DE TON AIDE :king: