oracle 12c 新特性之不可見欄位

張衝andy發表於2017-05-07
        在Oracle 11g R1中,Oracle以不可見索引和虛擬欄位的形式引入了一些不錯的增強特性。繼承前者併發揚光大,Oracle 12c 中引入了不可見欄位思想。在之前的版本中,為了隱藏重要的資料欄位以避免在通用查詢中顯示,我們往往會建立一個檢視來隱藏所需資訊或應用某些安全條件。
  在12c中,你可以在表中建立不可見欄位。當一個欄位定義為不可見時,這一欄位就預設不會出現在通用查詢中,除非在SQL語句或條件中有顯式的提及這一欄位,或是在表定義中有DESCRIBED。要新增或是修改一個不可見欄位是非常容易的,反之亦然。

實驗:
1. 建立一個表,指定passwd為不可見欄位
SQL>create table invisible_t(id int,name varchar2(20),passwd varchar2(20) invisible);
2. 向表中插入資料
SQL>insert into invisible_t values(1,'andy',1);
ERROR at line 1:
ORA-00913: too many values
SQL> insert into invisible_t(id,name,passwd) values(1,'andy',1);


1 row created.
SQL> insert into invisible_t(id,name) values(2,'andy02');

1 row created.

3. 查詢情況
SQL> select * from invisible_t;

ID NAME
---------- --------------------
1 andy
2 andy02

SQL> select id,name from invisible_t;

ID NAME
---------- --------------------
1 andy
2 andy02

SQL> select id,name,passwd from invisible_t;

ID NAME PASSWD
---------- -------------------- --------------------
1 andy 1
2 andy02

4.修改欄位為可見欄位或不可見欄位
SQL> alter table invisible_t modify(passwd visible);

Table altered.

SQL> select * from invisible_t;

ID NAME PASSWD
---------- -------------------- --------------------
1 andy 1
2 andy02

SQL> alter table invisible_t modify(passwd invisible);

Table altered.

SQL> select * from invisible_t;

ID NAME
---------- --------------------
1 andy
2 andy02
-- 建立時未指定為不可見欄位,若之後想修改為不可見欄位,也可以。
SQL>  alter table invisible_t modify(name invisible);

Table altered.

SQL> alter table invisible_t modify(name visible);

Table altered.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2138612/,如需轉載,請註明出處,否則將追究法律責任。

相關文章