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