¿Cómo puedo crear una copia de una tabla de Oracle sin copiar los datos?

Resuelto Andrew asked hace 15 años • 17 respuestas

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?

Andrew avatar Oct 24 '08 21:10 Andrew
Aceptado

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.


Jim Hudson avatar Oct 24 '2008 14:10 Jim Hudson

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;
Dave Costa avatar Oct 27 '2008 15:10 Dave Costa
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

sunleo avatar Dec 21 '2013 17:12 sunleo