Edited at

【Oracle 12Cのお勉強】テーブルの列を全部非表示列にすることはできるのか?

More than 1 year has passed since last update.


内容

Oracle 12cで、通常は見えない列「非表示列」という機能が追加された。

テーブルの列を全部非表示列にすることが可能か確認する。


非表示列とは?

テーブルの定義には存在するが、通常の操作では見ることができない列。

create table時、列にinvisibleを指定することで非表示列にすることができる。

▼ 動作確認用テーブルTEST01を作成する。

create table test01 (

id number(3),
name varchar2(10),
himitsu varchar2(10) invisible
);

▼ descコマンドで定義を確認。invisibleの列は表示されない。

SQL> desc test01

名前 NULL?
----------------------------------------- -------- ----------------------------
ID NUMBER(3)
NAME VARCHAR2(10)

▼ データをinsertしてみる。invisibleの列に値を格納する場合、列名を指定しないとエラーになる。

SQL> insert into test01 values (1,'abc');

1行が作成されました。

SQL> insert into test01 values (2,'def','ZZZ');
insert into test01 values (2,'def','ZZZ')
*
1でエラーが発生しました。:
ORA-00913: 値の個数が多すぎます。

SQL> insert into test01 (id,name,himitsu) values (2,'def','ZZZ');
1行が作成されました。

▼selectで内容を表示してみる。invisible列は直接指定しないと見えない。

SQL> select * from test01;

ID NAME
--- ----
1 abc
2 def

SQL> select id,name,himitsu from test01;
ID NAME HIMITSU
--- ---- -------
1 abc
2 def ZZZ

▼ "set colinvisible on"で非表示列を表示することができる。

SQL> set colinvisible on

SQL> desc test01
名前 NULL?
----------------------------------------- -------- ----------------------------
ID NUMBER(3)
NAME VARCHAR2(10)
HIMITSU (INVISIBLE) VARCHAR2(10)

▼ user_tab_colsでinvisibleか確認できる。

SQL> select column_name,hidden_column from user_tab_cols where table_name = 'TEST01';

COLUMN_NAME HIDDEN_COLUMN
----------- -------------
HIMITSU YES
NAME NO
ID NO


テーブルの列全てをinvisibleにしてみる。

全ての列がinvisibleのテーブルtest02を作成する。

▼ create tableを実行。

SQL> create table test02 (

2 id number(3) invisible,
3 name varchar2(10) invisible,
4 himitsu varchar2(10) invisible
5 );

▼ 実行結果。

create table test02 (

*
1でエラーが発生しました。:
ORA-54039: 表には、非表示ではない列が少なくとも1つ必要です

→ 残念、できませんでした。