Outils personnels

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).
+
'''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 :
 +
declare
 +
  u VARCHAR(5) := 'RH';
 +
begin
 +
  for x in (select table_name from dba_tables where owner=u)
 +
  loop
 +
    execute immediate 'drop table '||u||'.'||x.table_name||' cascade constraints';
 +
  end loop;
 +
  for x in (select sequence_name from dba_sequences where sequence_owner=u)
 +
  loop
 +
    execute immediate 'drop sequence '||u||'.'||x.sequence_name;
 +
  end loop;
 +
  for x in (select procedure_name,procedure_type from dba_procedures where owner='ADM')
 +
  loop
 +
    execute immediate 'drop '||procedure_type||' '||u||'.'||x.table_name;
 +
  end loop;
 +
end;

Version du 9 décembre 2010 à 14:35

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 :

declare
  u VARCHAR(5) := 'RH';
begin
  for x in (select table_name from dba_tables where owner=u)
  loop
    execute immediate 'drop table '||u||'.'||x.table_name||' cascade constraints';
  end loop;
  for x in (select sequence_name from dba_sequences where sequence_owner=u)
  loop
    execute immediate 'drop sequence '||u||'.'||x.sequence_name;
  end loop;
  for x in (select procedure_name,procedure_type from dba_procedures where owner='ADM')
  loop
    execute immediate 'drop '||procedure_type||' '||u||'.'||x.table_name;
  end loop;
end;