x64 mega for edition descargar 11g oracle oracle11g

oracle - mega - Cómo establecer el valor predeterminado para la columna de la nueva tabla creada desde la declaración de selección en 11g



oracle download (4)

Creo una tabla en Oracle 11g con el valor predeterminado para una de las columnas. La sintaxis es:

create table xyz(emp number,ename varchar2(100),salary number default 0);

Esto creó con éxito. Por algunas razones, necesito crear otra tabla con la misma estructura de tabla y datos anteriores. Así que creé una nueva tabla con el nombre abc como

create table abc as select * from xyz.

Aquí "abc" se creó con éxito con la misma estructura y datos que la tabla anterior xyz . Pero para la columna "salario" en la tabla anterior, "xyz", el valor predeterminado se estableció en "0". Pero en la tabla recién creada "abc" el valor predeterminado no está establecido.

Esto es todo en Oracle 11g. Dígame la razón por la que no se estableció el valor predeterminado y cómo podemos establecerlo utilizando la instrucción select.


Deberá alter table abc modify (salary default 0);


El motivo es que CTAS (Crear tabla como selección) no copia ningún metadato del origen a la tabla de destino, es decir,

  • sin clave principal
  • sin llaves extranjeras
  • sin subvenciones
  • sin índices
  • ...

Para lograr lo que quieres, yo tampoco

  • use dbms_metadata.get_ddl para obtener la estructura completa de la tabla, reemplace el nombre de la tabla con el nuevo nombre, ejecute esta declaración y haga un INSERTO después para copiar los datos
  • o continúe usando CTAS, extraiga las restricciones no nulas para la tabla de origen de user_constraints y luego agréguelas a la tabla de destino

La nueva tabla solo hereda la restricción "no nula" y ninguna otra restricción. Por lo tanto, puede modificar la tabla después de crearla con el comando "crear tabla como" o puede definir todas las restricciones que necesita siguiendo

create table t1 (id number default 1 not null); insert into t1 (id) values (2); create table t2 as select * from t1;

Esto creará la tabla t2 sin restricción nula. Pero para alguna otra restricción, excepto "no nulo", debe usar la siguiente sintaxis

create table t1 (id number default 1 unique); insert into t1 (id) values (2); create table t2 (id default 1 unique) as select * from t1;


Puede especificar las restricciones y los valores predeterminados en CREATE TABLE AS SELECT, pero la sintaxis es la siguiente

create table t1 (id number default 1 not null); insert into t1 (id) values (2); create table t2 (id default 1 not null) as select * from t1;

Es decir, no heredará las restricciones de la tabla / selección de origen. Solo el tipo de datos (longitud / precisión / escala) está determinado por la selección.