« ¿Qué es un CRASH RECOVERY o INSTANCE RECOVERY?Oracle 12c New Features : Aumento de largo en columnas VARCHAR2, NVARCHAR2 y RAW »

Oracle 12c New Features : Invisible Columns



En Oracle 12c nace una nueva característica la de convertir columnas a INVISIBLES, la verdad y considerando todos los contras que tiene, no me parece que sea muy útil....quizás se amolde a alguna necesidad muy particular.. A continuación les explico los alcances de las columnas invisibles B)



Cualquier columna de alguna tabla Oracle se puede dejar INVISIBLE , esto implica que la columna no será usada de manera habitual , las operaciones que no consideran la columna INVISIBLE son las siguientes :

- SELECT * FROM
- Comando DESCRIBE en SQL*Plus
- El tipo de datos %ROWTYPE en una declaración de Pl/Sql


Una columna que se deje como INVISIBLE se puede dejar como visible nuevamente mediante el comando ALTER TABLE Ejemplos de lo mencionado :


Creamos una tabla y le indicamos que una de sus columnas será INVISIBLE

Create table t1
(campo1 number ,
campo2 number ,
campo3 varchar2(100),
campo4 number INVISIBLE
)


Si realizamos un DESCRIBE de la tabla no aparecerá la columna que dejamos como inválida

ORACLE> desc t1
 Name                                              Null?    Type
 ------------------------------------------------- -------- ---------
 CAMPO1                                                     NUMBER
 CAMPO2                                                     NUMBER
 CAMPO3                                                     VARCHAR2(100)


Como podemos ver no aparece la columna INVISIBLE, está columna la podemos ver a través de SQL*Plus si realizamos el seteo con SET COLINVISIBLE ON

ORACLE> set colinvisible on
ORACLE> desc t1
 Name                                              Null?    Type
 ------------------------------------------------- -------- ---------
 CAMPO1                                                     NUMBER
 CAMPO2                                                     NUMBER
 CAMPO3                                                     VARCHAR2(100)
 CAMPO4 (INVISIBLE)                                         NUMBER


Si insertamos datos en la tabla con la columna invisible, le tenemos que indicar explicitamente que insertamos datos en esa columna

ORACLE> insert into t1 (campo1, campo2 , campo3 , campo4 ) values (1,2,'a',4);

1 row created.


Si insertamos datos, sin indicarle que lo haremos en una de sus columnas invisibles , pues aparece un error

ORACLE> insert into t1 values (1,2,'a',4);
insert into t1 values (1,2,'a',4)
*
ERROR at line 1:
ORA-00913: too many values


Si ejecutamos un SELECT sobre la tabla también le debemos indicar la columna invisible, pues un SELECT * FROM no mostrará la columna

ORACLE> select * from t1; --> A pesar de que ejecutamos un SELECT * , no aparece la columna INVISIBLE

    CAMPO1;    CAMPO2;CAMPO3
----------;----------;--------
         1;         2;a


ORACLE> select campo1 , campo2 , campo3 , campo4 from t1;

    CAMPO1;    CAMPO2;CAMPO3      ;    CAMPO4
----------;----------;------------;----------
         1;         2;a           ;         4


Los comandos para dejar VISIBLE o INVISIBLE una columna

alter table t1 modify campo4 invisible;
alter table t1 modify campo4 visible;


Restricciones :
- Las tablas externas no pueden tener columnas invisibles
- Las tablas en cluster no pueden tener columnas invisibles
-

Inconvenientes :
- Cada vez que se lleva a cabo el ocultamiento de una columna se le cambia el orden en que se visualiza cuando se ejecuta un DESCRIBE
He acá un ejemplo :

Creamos la tabla y hacemos un describe para visualizar el orden de las columnas

  1  Create table t2
  2  (campo1 number ,
  3  campo2 number ,
  4  campo3 varchar2(100),
  5  campo4 number invisible
  6* )
ORACLE> /

Table created.

ORACLE> desc t2
 Name                   Null?    Type
 --------------------   ------- ----------
 CAMPO1                         NUMBER
 CAMPO2                         NUMBER
 CAMPO3                         VARCHAR2(100)
 CAMPO4 (INVISIBLE)             NUMBER  
Nota : Se aprecia el orden de las columnas


 ORACLE> alter table t2 modify campo1 invisible;

Table altered.

ORACLE> desc t2
 Name                       Null?    Type
 -------------------------- -------- --------
 CAMPO2                              NUMBER
 CAMPO3                              VARCHAR2(100)
 CAMPO1 (INVISIBLE)                  NUMBER
 CAMPO4 (INVISIBLE)                  NUMBER
Nota : Cambia el orden de las columnas

ORACLE> alter table t2 modify campo1 visible;

Table altered.

ORACLE> desc t2
 Name                  Null?    Type
 --------------------- -------- --------
 CAMPO2                         NUMBER
 CAMPO3                         VARCHAR2(100)
 CAMPO1                         NUMBER
 CAMPO4 (INVISIBLE)             NUMBER
Nota : Las columnas siguen en el orden en que quedaron


Como dato importante, sobre este tipo de columnas se pueden crear índices y estos no se verán afectados y el optimizador seguirá tomando en cuenta estás columnas, aunque estén como INVISIBLES


Es una característica que existe, pero la verdad....no encuentro que sea muy útil, es más , creo que puede ser perjudicial para nuestras aplicaciones



by Ligarius
13.08.13. 13:59:18. 626 words, 3651 views. Categories: Oracle 12c ,