Mais uma nova feature que surgiu na versão 12c são as colunas invisíveis(invisible columns). Seu proposito é permitir que alterações em uma tabela possam ser feitas sem afetar os usuários e as aplicações que utilizam a tabela de modo que após as aplicações serem atualizadas para utilizarem as novas colunas podemos tornar as colunas invisíveis visíveis.
Quando uma coluna invisível é criada, consultas e operações podem utilizá-la apenas referenciando explicitamente o nome da coluna, caso contrário ela é totalmente invisível nas operações.
Por padrão em qualquer acesso genérico realizado sobre uma tabela todas as colunas invisíveis são omitidas, como no SQL*Plus:
--Criando uma tabela com coluna invisível SQL> create table teste (a number, b varchar2(5) invisible); Tabela criada. SQL> desc teste Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- A NUMBER SQL> insert into teste values (1); 1 linha criada. SQL> select * from teste; A ---------- 1 SQL> insert into teste values (2,'par'); insert into teste values (2,'par') * ERRO na linha 1: ORA-00913: valores demais -- referenciando explicitamente o nome da coluna invisível SQL> insert into teste (a,b) values (2,'par'); 1 linha criada. SQL> select * from teste; A ---------- 1 2 SQL> select a,b from teste; A B ---------- ----- 1 2 par
Alterando a coluna invisível para visível:
SQL> alter table teste modify (b visible); Tabela alterada. SQL> desc teste; Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- A NUMBER B VARCHAR2(5) SQL> select * from teste; A B ---------- ----- 1 2 par
Adicionando mais colunas invisíveis:
SQL> alter table teste add (c char invisible, d int invisible); Tabela alterada. SQL> desc teste; Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- A NUMBER B VARCHAR2(5) SQL> alter table teste modify (a invisible); Tabela alterada. SQL> desc teste Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- B VARCHAR2(5)
Apesar das colunas invisíveis serem omitidas por default no SQL*Plus, ainda podemos fazê-lo mostrar as colunas invisíveis no DESCRIBE(DESC):
SQL> show colinvisible colinvisible OFF SQL> set colinvisible ON SQL> SQL> desc teste Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- B VARCHAR2(5) A (INVISIBLE) NUMBER C (INVISIBLE) CHAR(1) D (INVISIBLE) NUMBER(38)
Colunas virtuais também podem ser invisível bem como podemos utilizar uma coluna invisível como chave de particionamento durante a criação de uma tabela.
- Tipos de tabelas que não podem conter colunas invisíveis:
- External tables
- Cluster tables
- Temporary tables
Um fator que sofre influência com a utilização das colunas invisíveis é a ordenação das colunas da tabela.
Normalmente as colunas são exibidas(listadas) na ordem em que elas foram criadas no CREATE TABLE, ou mesmo quando são adicionadas posteriormente elas são exibidas por ultimo na ordem da lista de colunas.
Quando utilizamos colunas invisíveis, as colunas invisíveis não são incluidas na ordem de colunas da tabela, desta forma sempre que tornamos uma coluna visível ela será a ultima da ordem de colunas e quando tornamos uma coluna invisível ocorre uma reorganização na ordem das colunas. Veja o exemplo abaixo:
SQL> create table exemplo (a int, b int invisible, c int); Tabela criada. SQL> col column_name for a15 SQL> select column_name, column_id 2 from dba_tab_cols 3 where table_name='EXEMPLO' 4 order by 2 5 / COLUMN_NAME COLUMN_ID --------------- ---------- A 1 C 2 B SQL> desc exemplo Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- A NUMBER(38) C NUMBER(38) -- Alterando coluna B para visível SQL> alter table exemplo modify (b visible); Tabela alterada. SQL> select column_name, column_id 2 from dba_tab_cols 3 where table_name='EXEMPLO' 4 order by 2 5 / COLUMN_NAME COLUMN_ID --------------- ---------- A 1 C 2 B 3 SQL> desc exemplo Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- A NUMBER(38) C NUMBER(38) B NUMBER(38) -- Alterando coluna A para invisível SQL> alter table exemplo modify (a invisible); Tabela alterada. SQL> select column_name, column_id 2 from dba_tab_cols 3 where table_name='EXEMPLO' 4 order by 2 5 / COLUMN_NAME COLUMN_ID --------------- ---------- C 1 B 2 A SQL> desc exemplo Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- C NUMBER(38) B NUMBER(38) -- Alterando coluna A para visível SQL> alter table exemplo modify (a visible); Tabela alterada. SQL> select column_name, column_id 2 from dba_tab_cols 3 where table_name='EXEMPLO' 4 order by 2 5 / COLUMN_NAME COLUMN_ID --------------- ---------- C 1 B 2 A 3 SQL> desc exemplo Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- C NUMBER(38) B NUMBER(38) A NUMBER(38)
Referência:
http://docs.oracle.com/cd/E16655_01/server.121/e17636/tables.htm#ADMIN13866
0 comentários:
Postar um comentário