Oracle 12c から非表示列が設定できるようになった

メモ:

Oracle 12c から非表示列(INVISIBLE)という定義ができるようになりました。この列は、項目定義に INVISIBLE を指定することで作ることができ、明示的に指定しない限り見えない列になります。

GENERATED ALWAYS AS IDENTITY

非表示列を含むテーブルを作成するには、項目名に「 INVISIBLE 」を指定します。

SQL> CREATE TABLE T_INVISIBLE
  (
     col1 NUMBER,
     col2 NUMBER INVISIBLE,
     col3 NUMBER
  );

表が作成されました。

データを追加して見え方を確認してみると、 COL2 が表示されないことが分かります。

SQL> INSERT INTO T_INVISIBLE (COL1,COL2,COL3) VALUES (10,20,30);

1行が作成されました。

SQL> SELECT * FROM T_INVISIBLE;

      COL1       COL3
---------- ----------
        10         30

列定義を表示する DESCRIBE でも確認してみます。

SQL> DESC T_INVISIBLE;
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER
 COL3                                               NUMBER

SELECT 文で明示的に列を指定すると、 INVISIBLE に指定した列も表示することができます。

 SQL> SELECT COL1,COL2,COL3 FROM T_INVISIBLE;

      COL1       COL2       COL3
---------- ---------- ----------
        10         20         30

非表示列といっていますが、単に見えないだけでなく明示的に指定しないと列そのものが内容に動作します。次に例では、 INVISIBLE に指定した列に値が設定されず COL3 に設定されます。

SQL> INSERT INTO T_INVISIBLE  VALUES (100,200);

1行が作成されました。

SQL> SELECT COL1,COL2,COL3 FROM T_INVISIBLE;

      COL1       COL2       COL3
---------- ---------- ----------
        10         20         30
       100                   200

ちなみに、 SQL*Plus で「 SET COLINVISIBLE ON 」を指定すると DESCRIBE で非表示列を確認できるようになります。

SQL> SET COLINVISIBLE ON
SQL> desc T_INVISIBLE;
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER
 COL3                                               NUMBER
 COL2 (INVISIBLE)                                   NUMBER