We have invisible indexes in oracle 11g. But in oracle 12c we invisible column was introuduced.
DEMO:
Lets create a normal table:
SQL> create table dbatest ( empno number, name varchar2(10)); Table created. SQL> insert into dbatest values ( 1,'SERY'); 1 row created. SQL> insert into dbatest values ( 2,'MORY'); 1 row created. SQL> commit; Commit complete. SQL> ; 1* select owner,table_name,column_name,hidden_column from dba_tab_cols where table_name='DBATEST' SQL> / OWNER TABLE_NAME COLUMN_NAM HID --------- ---------- ---------- --- TEST DBATEST EMPNO NO TEST DBATEST NAME NO
Make a column invisible:
SQL> alter table dbatest modify ( NAME invisible); Table altered. SQL> select owner,table_name,column_name,hidden_column from dba_tab_cols where table_name='DBATEST'; OWNER TABLE_NAME COLUMN_NAM HID --------- ---------- ---------- --- TEST DBATEST EMPNO NO TEST DBATEST NAME YES SQL> select * from dbatest; EMPNO ---------- 1 2
Now the column “NAME” is invisible to application. And we if create another table from this table, then invisible column won’t be created.
SQL> create table dbaprod as select * from dbatest; Table created. SQL> select * from dbaprod; EMPNO ---------- 1 2
But still you can access the data of invisible column by specifically using the column_name.
SQL> select empno, name from dbatest; EMPNO NAME ---------- ---------- 1 SERY 2 MORY
You can make it visible again:
SQL> alter table dbatest modify ( name visible); Table altered. SQL> select owner,table_name,column_name,hidden_column from dba_tab_cols where table_name='DBATEST'; OWNER TABLE_NAME COLUMN_NAM HID --------- ---------- ---------- --- TEST DBATEST EMPNO NO TEST DBATEST NAME NO