sql - tipo - oracle crear tabla temporal select
¿Cómo puedo crear una copia de una tabla de Oracle sin copiar los datos? (15)
copia sin datos de tabla
create table <target_table> as select * from <source_table> where 1=2;
copiar con datos de la tabla
create table <target_table> as select * from <source_table>;
Conozco la afirmación:
create table xyz_new as select * from xyz;
¿Qué copia la estructura y los datos, pero qué pasa si solo quiero la estructura?
De otra manera, puede obtener el ddl de la creación de tablas del comando que se lista a continuación y ejecutar la creación.
SELECT DBMS_METADATA.GET_DDL(''TYPE'',''OBJECT_NAME'',''DATA_BASE_USER'') TEXT FROM DUAL
TYPE is (''TABLE'',''PROCEDURE'', etc...)
Con este comando puede obtener la mayoría de ddl de los objetos de la base de datos.
La tarea anterior se puede completar en dos simples pasos.
PASO 1:
CREATE table new_table_name AS(Select * from old_table_name);
La query
anterior crea un duplicado de una tabla (con contenido también).
Para obtener la estructura, elimine el contenido de la tabla usando.
PASO 2:
DELETE * FROM new_table_name.
Espero que esto resuelva tu problema. Y gracias a los posts anteriores. Me dio mucha información.
Puede hacer esto. Create table New_table as select * from Old_table where 1=2 ;
pero ten cuidado La tabla que creas la dosis no tiene ningún Índice, Pk, etc. como la tabla antigua
Simplemente escriba una consulta como:
create table new_table as select * from old_table where 1=2;
donde new_table
es el nombre de la nueva tabla que desea crear y old_table
es el nombre de la tabla existente cuya estructura desea copiar, esto solo copiará la estructura.
Solo usa una cláusula donde no seleccionará ninguna fila:
create table xyz_new as select * from xyz where 1=0;
Limitaciones
Las siguientes cosas no serán copiadas a la nueva tabla:
- secuencias
- desencadena
- índices
- Algunas restricciones no pueden ser copiadas
- registros de vistas materializadas
Esto tampoco maneja particiones
Usé el método que aceptaste mucho, pero como alguien lo señaló no duplica las restricciones (a excepción de 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 creación de la declaració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 puede hacer esto en versiones anteriores usando EXP / IMP, pero ahora es mucho más fácil).
Editado para agregar Si la tabla que busca está en un esquema diferente:
SELECT dbms_metadata.get_ddl( ''TABLE'', ''MY_TABLE_NAME'', ''OTHER_SCHEMA_NAME'' ) FROM DUAL;
Usando el desarrollador de SQL, seleccione la tabla y haga clic en la pestaña DDL
Puede usar ese código para crear una nueva tabla sin datos cuando la ejecute en una hoja de cálculo de SQL.
sqldeveloper es una aplicación gratuita de oracle.
Si la tabla tiene secuencias o desencadenadores, el ddl generará a veces esas también para usted. Solo debe tener cuidado con el orden en que los hace y saber cuándo activar o desactivar los activadores.
Usando pl / sql developer, puede hacer clic derecho en el nombre de la tabla en el área de trabajo de sql o en el explorador de objetos, luego haga clic en "ver" y luego haga clic en "ver sql", que genera el script de sql para crear la tabla junto con todas las restricciones. , índices, particiones, etc.
A continuación ejecutas el script usando el new_table_name
también puedes hacer un
create table abc_new as select * from abc;
luego truncar la tabla abc_new
. Espero que esto sea suficiente su requisito.
WHERE 1 = 0
o condiciones falsas similares funcionan, pero no me gusta cómo se ven. El código marginalmente más limpio para Oracle 12c + IMHO es
CREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Se aplican las mismas limitaciones: solo las definiciones de columna y su nulabilidad se copian en una nueva tabla.
DECLARE
l_ddl VARCHAR2 (32767);
BEGIN
l_ddl := REPLACE (
REPLACE (
DBMS_LOB.SUBSTR (DBMS_METADATA.get_ddl (''TABLE'', ''ACTIVITY_LOG'', ''OLDSCHEMA''))
, q''["OLDSCHEMA"]''
, q''["NEWSCHEMA"]''
)
, q''["OLDTABLSPACE"]''
, q''["NEWTABLESPACE"]''
);
EXECUTE IMMEDIATE l_ddl;
END;
Create table target_table
As
Select *
from source_table
where 1=2;
Source_table es la tabla de la que quieres copiar la estructura.
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;
Cree una tabla nueva y vacía utilizando el esquema de otro. Solo agregue una cláusula WHERE que haga que la consulta no devuelva datos:
create table xyz_new as select * from xyz where rownum = -1;
Para evitar iterar una y otra vez y no insertar nada en función de la condición donde 1 = 2