18 enero 2015

Oracle 12cR1 novedades (Parte I); Columnas Invisibles



Oracle 12cR1 – Columnas Invisibles


La primera de las Nuevas Características de Oracle 12c que vamos a traer a este blog son las columnas invisibles. Es una de las opciones menos controvertidas y mas sencillas de explicar.

La idea básica de las columnas básicas es que ellos permiten ser ocultadas desde las aplicaciones.  Las columnas se pueden hacer invisibles en la sentencia CREATE TABLE o posteriormente utilizando una sentencia ALTER TABLE. Por defecto columnas son visibles. Columnas invisibles pueden hacerse visibles de nuevo utilizando una sentencia ALTER TABLE.

¿Como funciona todo esto?

El siguiente ejemplo crea una tabla con una columna invisible:
SQL> CREATE TABLE ejemplo1
(
  c1 NUMBER,
  c2 NUMBER INVISIBLE,
  c3 NUMBER,
  c4 NUMBER
);

SQL> DESC ejemplo1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 C1                                                 NUMBER
 C3                                                 NUMBER
 C4                                                 NUMBER

SQL*Plus puede opcionalmente mostrar columnas implementando la opción COLINVISIBLE.
SQL> SET COLINVISIBLE ON

SQL> DESC ejemplo1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 C1                                                 NUMBER
 C3                                                 NUMBER
 C4                                                 NUMBER
 C2 (INVISIBLE)                                     NUMBER

A pesar de que la columna es invisible, en esa columna todavía se pueden visualizar y modificar. Por ejemplo:

SQL> INSERT INTO ejemplo1 (c1,c2,c3,c4) VALUES (11,12,13,14);

1 row created.
SQL> SELECT c1,c2,c3,c4 FROM ejemplo1;

        C1         C2         C3         C4
---------- ---------- ---------- ----------
        11         12         13         14

Mirad, que en el ejemplo superior, todas las columnas son listadas tanto en las sentencias INSERT y SELECT. Que ocurre si omitimos los nombres de las columnas en la sentencia INSERT?

INSERT INTO ejemplo1 VALUES (21,22,23,24)
            *
ERROR at line 1:
ORA-00913: too many values

La sentencia INSERT falla por que estamos intentando meter ina columna invisible en la columna (C2). Si nosotros lo intentamos otra vez omitiendo para C2 la sentencia INSERT será correcta:


SQL> INSERT INTO ejemplo1 VALUES (21,22,24);

1 row created.

SQL> SELECT c1,c2,c3,c4 FROM ejemplo1;

        C1         C2         C3         C4
---------- ---------- ---------- ----------
        11         12         13         14
        21                    22         24

Observa que el valor para C2 es NULL para cada fila encontrada. SELECT * no devuelve las columnas invisibles. Por ejemplo:

SQL> SELECT * FROM ejemplo1;

        C1         C3         C4
---------- ---------- ----------
        11         12         14
        21         22         24

Una columna invisible puede ser visible de nuevo, por ejemplo:
ALTER TABLE ejemplo1 MODIFY c2 VISIBLE;

Una columna visible puede ser invisible, por ejemplo:

ALTER TABLE ejemplo1 MODIFY c2 INVISIBLE;

No hay comentarios:

Publicar un comentario

Por favor deja tu comentario, es valioso.