Supprimer tous les objets d'un utilisateur : Différence entre versions
De wikiGite
Ligne 7 : | Ligne 7 : | ||
end; | end; | ||
− | '''Note''' : pour vider complètement le schéma d'un utilisateur (avant réimport par exemple) il convient de vérifier quels types d'objets lui appartiennent (des séquences, des fonctions, entre autres). On peut alors construire quelque chose comme ça : | + | '''Note''' : pour vider complètement le schéma d'un utilisateur (avant réimport par exemple) il convient de vérifier quels types d'objets lui appartiennent (des séquences, des fonctions, entre autres). On peut alors construire quelque chose comme ça sous SQLPLUS (testé sur une 10g) : |
+ | set serveroutput on | ||
declare | declare | ||
u VARCHAR(5) := 'ADM'; | u VARCHAR(5) := 'ADM'; | ||
begin | begin | ||
+ | DBMS_OUTPUT.ENABLE( 1000000 ) ; | ||
+ | -- Les tables sont a part car la syntaxe du drop est differente | ||
for x in (select table_name from dba_tables where owner=u) | for x in (select table_name from dba_tables where owner=u) | ||
loop | loop | ||
+ | dbms_output.put_line ('Dropping TABLE '||x.table_name); | ||
execute immediate 'drop table '||u||'.'||x.table_name||' cascade constraints'; | execute immediate 'drop table '||u||'.'||x.table_name||' cascade constraints'; | ||
end loop; | end loop; | ||
− | + | for x in (select object_name,object_type from dba_objects where owner=u and object_type not in ('LOB','PACKAGE BODY') and object_name not like 'BIN$%') | |
− | + | loop | |
− | + | dbms_output.put_line ('Dropping '||x.object_type||' '||x.object_name); | |
− | + | execute immediate 'drop '||x.object_type||' '||u||'.'||x.object_name; | |
− | + | end loop; | |
− | |||
− | |||
− | |||
end; | end; |
Version du 9 décembre 2010 à 15:50
On peut forcer l'exécution de DDL (exemple : ajout de droits, suppression de tables, etc..) multiple par ce genre de code :
begin for x in (select table_name from dba_tables where owner='ADM') loop execute immediate 'drop table ADM.'||x.table_name||' cascade constraints'; end loop; end;
Note : pour vider complètement le schéma d'un utilisateur (avant réimport par exemple) il convient de vérifier quels types d'objets lui appartiennent (des séquences, des fonctions, entre autres). On peut alors construire quelque chose comme ça sous SQLPLUS (testé sur une 10g) :
set serveroutput on declare u VARCHAR(5) := 'ADM'; begin DBMS_OUTPUT.ENABLE( 1000000 ) ; -- Les tables sont a part car la syntaxe du drop est differente for x in (select table_name from dba_tables where owner=u) loop dbms_output.put_line ('Dropping TABLE '||x.table_name); execute immediate 'drop table '||u||'.'||x.table_name||' cascade constraints'; end loop; for x in (select object_name,object_type from dba_objects where owner=u and object_type not in ('LOB','PACKAGE BODY') and object_name not like 'BIN$%') loop dbms_output.put_line ('Dropping '||x.object_type||' '||x.object_name); execute immediate 'drop '||x.object_type||' '||u||'.'||x.object_name; end loop; end;