Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como descartar a lista de tabelas de um esquema no Oracle?


Use o SQL dinâmico acionando o dicionário de dados.
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;

É uma boa ideia ser preciso com a cláusula LIKE; usando o escape palavra-chave para garantir que os sublinhados não sejam tratados como curingas. Como alternativa, use substr(table_name, 1, 7) = 'PREFIX_' .

Descartar a tabela errada não é um desastre, desde que você esteja trabalhando em 10g ou posterior e a lixeira está habilitada , mas ainda é melhor não. Obviamente, você não executaria um código como este em Produção, mas usaria o princípio para gerar um script de instruções drop.

O código acima não lida com dependências. Se você tiver chaves estrangeiras referenciando as tabelas prefixadas e quiser forçar a eliminação das tabelas, use esta lógica adicional:
     execute immediate 'drop table '|| trec.table_name ||' cascade constraint';

Isso elimina as restrições de chave estrangeira, mas deixa as tabelas (anteriormente) dependentes.