lunes, 1 de julio de 2013

Oracle 12c: Columnas Invisibles

En Oracle 12c las tablas ahora cuentan con la opción de crear columnas de manera invisible, estas columnas no son vistas ni se permite usarlas a menos que se nombren explicitamente, a continuación un ejemplo sencillo:

[oracle@orcl12c ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Mon Jul 1 15:02:23 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> create table dgomez (a int, b int invisible, c int);

Table created.

SQL> desc dgomez;
 Name                                      Null?    Type
 ----------------------------------------- -------- -------------
 A                                                  NUMBER(38)
 C                                                  NUMBER(38)

SQL> alter table dgomez modify (b visible);

Table altered.

SQL> desc dgomez;
 Name                                      Null?    Type
 ----------------------------------------- -------- -------------
 A                                                  NUMBER(38)
 C                                                  NUMBER(38)
 B                                                  NUMBER(38)

Vean que cada vez que la columna invisible sufre una modificación (de invisible a visible o viceversa) dicha columna pasa a ser la ultima de la tabla, en este caso la columna B se creó en la posicion número 2, pero cuando se le modificó para que fuera visible pasó a ser la tercer columna (la ultima).

SQL> insert into dgomez values(1,2,3);
insert into dgomez values(1,2,3)
            *
ERROR at line 1:
ORA-00913: too many values

SQL> insert into dgomez (a,b,c) values (1,2,3);

1 row created.

Vean que no se pudo realizar la inserción de un registro con los tres valores porque no se está nombrando las tres columnas de manera explicita, una vez nombrando las tres columnas se podrá realizar el insert.

SQL> select * from dgomez;

         A          C
---------- ----------
         1          3

SQL> select a,b,c from dgomez;

         A          B          C
---------- ---------- ----------
         1          2          3

En este ultimo ejemplo, para las consultas tambien la columna no se podrá observer a menos que se le nombre explícitamente en la clausula SELECT.

No hay comentarios:

Publicar un comentario

Oracle ACE Director Award - Deiby Gómez

Thanks #OracleACE Program for this awesome certificate recognizing the work I have done in the community for the last year. Looking forwa...