¿Cómo puedo crear una copia de una tabla de Oracle sin copiar los datos?
Conozco la declaración:
create table xyz_new as select * from xyz;
Que copia la estructura y los datos, pero ¿y si solo quiero la estructura?
Simplemente use una cláusula Where que no seleccione ninguna fila:
create table xyz_new as select * from xyz where 1=0;
Limitaciones
Lo siguiente no se copiará en la nueva tabla:
- secuencias
- desencadenantes
- índices
- Es posible que algunas restricciones no se copien.
- registros de vistas materializadas
Esto tampoco maneja particiones.
Utilicé mucho el método que aceptaste, pero como alguien señaló, no duplica restricciones (excepto NOT NULL, creo).
Un método más avanzado si desea duplicar la estructura completa es:
SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;
Esto le dará el texto completo de la declaración de creación que puede modificar como desee para crear la nueva tabla. Tendría que cambiar los nombres de la tabla y todas las restricciones, por supuesto.
(También puedes hacer esto en versiones anteriores usando EXP/IMP, pero ahora es mucho más fácil).
Editado para agregar si la tabla que busca tiene un esquema diferente:
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;
create table xyz_new as select * from xyz where rownum = -1;
Para evitar iterar una y otra vez e insertar nada según la condición donde 1 = 2