sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo eliminar la lista de tablas de un esquema en Oracle?

Use SQL dinámico para eliminar el diccionario de datos.

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;

Es una buena idea ser preciso con la cláusula LIKE; usando el escape palabra clave para garantizar que los guiones bajos no se traten como comodines. Alternativamente, use substr(table_name, 1, 7) = 'PREFIX_' .

Descartar la tabla incorrecta no es un desastre siempre que esté trabajando en 10g o posterior y la PAPELERA DE RECICLAJE está habilitada , pero aún es mejor no hacerlo. Obviamente, no ejecutaría un código como este en producción, pero usaría el principio para generar un script de sentencias drop.

El código anterior no maneja las dependencias. Si tiene claves foráneas que hacen referencia a las tablas prefijadas y desea forzar la eliminación de las tablas, use esta lógica adicional:

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

Esto elimina las restricciones de clave externa pero deja las tablas dependientes (anteriormente).