列名です。
GoldenGateのフィジビリティチェックで、SYS_NC00004$ なる列があったので調べてみたところ、どうやらファンクション索引を付けた場合に自動で仮想列ができるようです。
こんな感じ
SQL> create table test1 (id number , col1 char(1), col2 char(1) ); Table created. SQL> insert into test1 values (1,'x','z'); 1 row created. SQL> commit; Commit complete. SQL> create index test1_i1 on test1( col1 || '-' || col2); Index created. SQL> select COLUMN_ID,TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,VIRTUAL_COLUMN,HIDDEN_COLUMN 2 from user_tab_cols 3 where table_name ='TEST1' 4 order by 1; COLUMN_ID TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH VIRTUAL_C HIDDEN_CO ---------- -------------------- -------------------- ---------- ----------- --------- --------- 1 TEST1 ID NUMBER 22 NO NO 2 TEST1 COL1 CHAR 1 NO NO 3 TEST1 COL2 CHAR 1 NO NO TEST1 SYS_NC00004$ CHAR 3 YES YES
VIRTUAL_COLUMN=YES(仮想列)で、HIDDEN_COLUMN=YES(非表示列)で作成されるようです。
ちなみに、非表示列は user_tab_columns では表示されません。
SQL> select TABLE_NAME,COLUMN_NAME,DATA_TYPE from dba_tab_columns where table_name ='TEST1' ; TABLE_NAME COLUMN_NAME DATA_TYPE -------------------- -------------------- ---------- TEST1 ID NUMBER TEST1 COL1 CHAR TEST1 COL2 CHAR
仮想列を明示的に作ると。。。
CREATE TABLE test2 (id number , col1 char(1), col2 char(1), col3 as ( col1 || '-' || col2) ); insert into test2 values (1,'x','z'); commit; create index test2_i1 on test2(col3); ... COLUMN_ID TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH VIRTUAL_C HIDDEN_CO ---------- -------------------- -------------------- ---------- ----------- --------- --------- 1 TEST2 ID NUMBER 22 NO NO 2 TEST2 COL1 CHAR 1 NO NO 3 TEST2 COL2 CHAR 1 NO NO 4 TEST2 COL3 CHAR 3 YES NO
仮想列で通常の列と同様に表示されます。
ちなみにどちらのケースも、ファンクション索引になります。
SQL> col INDEX_NAME for a20 SQL> col INDEX_TYPE for a30 SQL> select index_name, index_type from ind ; INDEX_NAME INDEX_TYPE -------------------- ------------------------------ TEST1_I1 FUNCTION-BASED NORMAL TEST2_I1 FUNCTION-BASED NORMAL