valor una transponer tabla registros por multiple modificar mejoras entre defecto columns columnas columna campo alterar agregar 12c 10g sql oracle

sql - una - oracle transponer registros columnas



¿Cómo elimino el valor predeterminado de una columna en Oracle? (3)

Una columna en una tabla tiene un valor predeterminado de sysdate y quiero cambiarlo para que no tenga ningún valor predeterminado, ¿cómo puedo hacer esto?


La única forma de hacer lo que desea es recrear la tabla.

Es bastante fácil de hacer en Toad, simplemente haga clic derecho en la tabla y seleccione "Rebuild Table". Toad creará un script que cambiará el nombre de la tabla y recreará una nueva tabla. La secuencia de comandos volverá a crear índices, restricciones, claves externas, comentarios, etc. ... y completará la tabla con datos.

Simplemente modifique la secuencia de comandos para eliminar "nulo predeterminado" después de la columna en cuestión.


La respuesta de Joe es correcta en el sentido de que una columna con DEFAULT NULL es funcionalmente equivalente a nunca haber definido un valor predeterminado para esa columna en primer lugar: si una columna no tiene valor predeterminado, inserte una nueva fila sin especificar un valor para esa columna resultados en NULL .

Sin embargo , Oracle representa internamente los dos casos claramente, como se puede ver al mirar la vista del sistema ALL_TAB_COLUMNS . *

  1. El caso donde se ha creado una columna, o ALTER ed, con DEFAULT NULL :

    create table foo (bar varchar2(3) default null); select default_length, data_default from all_tab_columns where table_name=''FOO''; => default_length data_default -------------- ------------ 4 NULL select dbms_metadata.get_ddl(''TABLE'',''FOO'') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) DEFAULT NULL … )

  2. Ningún valor predeterminado jamás especificado:

    create table foo (bar varchar2(3)); select default_length, data_default from all_tab_columns where table_name=''FOO''; => default_length data_default -------------- ------------ (null) (null) select dbms_metadata.get_ddl(''TABLE'',''FOO'') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) … )

Como se muestra arriba, hay un caso importante donde esta distinción sin sentido hace una diferencia en el resultado de Oracle: cuando se usa DBMS_METADATA.GET_DDL() para extraer la definición de la tabla.

Si está utilizando GET_DDL() para introspectar su base de datos, obtendrá una salida DDL ligeramente diferente para tablas funcionalmente idénticas .

Esto es realmente bastante molesto cuando se usa GET_DDL() para control de versiones y comparación entre varias instancias de una base de datos, y no hay forma de evitarlo, que no sea modificar manualmente la salida de GET_DDL() , o recrear completamente la tabla con sin valor predeterminado

* Al menos para Oracle 10g, 11g y 12c.


ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;