Dの小部屋

忘れやすい私のメモ帳

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

内容

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つ必要です

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