Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment supprimer la liste des tables d'un schéma dans Oracle ?

Utilisez SQL dynamique pour piloter le dictionnaire de données.

begin
     for trec in ( select table_name
                   from user_tables
                   where table_name like 'PREFIX\_%' escape `\' )
     loop
         dbms_output.put_line('dropping table ' || trec.table_name);
         execute immediate 'drop table '||trec.table_name;
     end loop;
end;

C'est une bonne idée d'être précis avec la clause LIKE; en utilisant la escape mot-clé pour s'assurer que les traits de soulignement ne sont pas traités comme des caractères génériques. Vous pouvez également utiliser substr(table_name, 1, 7) = 'PREFIX_' .

La suppression de la mauvaise table n'est pas un désastre à condition que vous travailliez sur 10g ou version ultérieure et la CORBEILLE est activée , mais il vaut mieux ne pas le faire. Évidemment, vous n'exécuteriez pas de code comme celui-ci en production, mais vous utiliseriez le principe pour générer un script d'instructions drop.

Le code ci-dessus ne gère pas les dépendances. Si vous avez des clés étrangères faisant référence aux tables préfixées et que vous souhaitez forcer la suppression des tables, utilisez cette logique supplémentaire :

     execute immediate 'drop table '|| trec.table_name ||' cascade constraint';

Cela supprime les contraintes de clé étrangère mais laisse les (anciennement) tables dépendantes.