Muchas veces he necesitado crear una vista para sustituir una antigua tabla. En ocasiones he tenido que mantener en la vista una columna que ya no existe pero que debo dejar por algún motivo. Lo que hago es definir la columna como “Función(NULL) AS NOMBRE_COLUMNA”. Si es VARCHAR2 pongo directamente NULL. Si quiero que sea un number TO_NUMBER(NULL) y si es una fecha TO_DATE(NULL). Por ejemplo:
1 2 3 4 5 6 | CREATE OR REPLACE VIEW CAMPOS_NULOS AS( SELECT NULL AS CADENA_VACIA, TO_NUMBER( NULL ) AS NUMERO_VACIO, TO_DATE( NULL ) AS FECHA_VACIA FROM DUAL ) / |
Si hacemos un desc:
SQL> DESC CAMPOS_NULOS Nombre ¿Nulo? Tipo ------------- -------- ---------------------------- CADENA_VACIA VARCHAR2 NUMERO_VACIO NUMBER FECHA_VACIA DATE
El único problema, como puede verse en el ejemplo, es que perdía la precisión. A raíz de una respuesta del semidiox Tom he conocido el milagroso CAST. Se le puede poner precisión y tipo a la columa haciendo un “CAST( NULL AS TIPO(PRECISION) )”:
1 2 3 4 5 6 | CREATE OR REPLACE VIEW CAMPOS_NULOS AS( SELECT CAST( NULL AS VARCHAR2(20) ) AS CADENA_VACIA, CAST( NULL AS NUMBER(4) ) AS NUMERO_VACIO, CAST( NULL AS DATE ) AS FECHA_VACIA FROM DUAL ) / |
Y haciendo un desc tenemos que:
SQL> DESC CAMPOS_NULOS Nombre ¿Nulo? Tipo ------------- -------- ---------------------------- CADENA_VACIA VARCHAR2(20) NUMERO_VACIO NUMBER(4) FECHA_VACIA DATE
En la Documentación oficial se explica la manera de uso y más ejemplos.