ITPub博客

首页 > 数据库 > Oracle > HIDDENT_COLUMN、VIRTUAL_COLUMN

HIDDENT_COLUMN、VIRTUAL_COLUMN

原创 Oracle 作者:dasong2410 时间:2012-02-02 14:17:22 0 删除 编辑
HIDDENT_COLUMN、VIRTUAL_COLUMN
user_tab_cols视图中有两个字段HIDDENT_COLUMN、VIRTUAL_COLUMN,分别表示 表中的字段是否隐藏、是否是虚拟字段。
HIDDENT_COLUMN:YES是隐藏列,NO不是隐藏列。
VIRTUAL_COLUMN:YES是虚拟列,NO不是虚拟列。

隐藏列:select * 不显示的字段,可能存储于段中,如使用set unused语法处理的字段;也可能不存储于段中(即不占存储空间),如基于函数的索引添加的列。
虚拟列:虚拟列,不存在于段中(即不占存储空间),只在数据字典中记录表达式,如基于函数的索引添加的列。

例:
create table t_hidden
(
  name  varchar2(24),
  dt    varchar2(24)
);

insert into t_hidden(name, dt) values('ds01', '20120101030405');
insert into t_hidden(name, dt) values('ds02', '20120102030405');
insert into t_hidden(name, dt) values('ds03', '20120103030405');
commit;

查询字段信息,结果如下:
set lines 180
col table_name for a15;
col column_name for a30;
col data_type for a15;
col data_default for a20;
col hidden_column for a15;
col virtual_column for a15;

select table_name,
       column_name,
       data_type,
       data_default,
       hidden_column,
       virtual_column
  from user_tab_cols
 where table_name='T_HIDDEN';

TABLE_NAME   COLUMN_NAME   DATA_TYPE   DATA_DEFAULT    HIDDEN_COLUMN    VIRTUAL_COLUMN
-------------------   ------------------------  -----------------  -----------------------  ----------------------------  ----------------------------
T_HIDDEN        DT                             VARCHAR2                                    NO                                 NO
T_HIDDEN        NAME                       VARCHAR2                                    NO                                 NO

创建基于函数的索引:
create index idx_hidden_dt on t_hidden(substr(dt, 1, 8));

再次查询字段信息,结果如下:
set lines 180
col table_name for a15;
col column_name for a30;
col data_type for a15;
col data_default for a20;
col hidden_column for a15;
col virtual_column for a15;

select table_name,
       column_name,
       data_type,
       data_default,
       hidden_column,
       virtual_column
  from user_tab_cols
 where table_name='T_HIDDEN';

TABLE_NAME      COLUMN_NAME       DATA_TYPE     DATA_DEFAULT        HIDDEN_COLUMN   VIRTUAL_COLUMN
--------------------     --------------------------- -----------------    --------------------------   ---------------------------  ---------------------------
T_HIDDEN           SYS_NC00003$        VARCHAR2     SUBSTR("DT",1,8)    YES                               YES
T_HIDDEN           DT                                 VARCHAR2                                           NO                                NO
T_HIDDEN           NAME                           VARCHAR2                                           NO                                NO
 
此时新增了一个字段SYS_NC00003$,HIDDEN_COLUMN、VIRTUAL_COLUMN字段均显示YES,此列为隐藏虚拟列(此种情况可以通过指定列的名称来显示隐藏虚拟列的内容)。此类字段命名规范如下:

字段名称共5段
1.SYS
2._
3.NC
4.表总字段数(包括虚拟隐藏字段)+1,左补0至5位字符
5.$
如上查询结果SYS_NC00003$

使用set unused语法处理字段:
alter table t_hidden set unused column name;

再次查询字段信息,结果如下:
set lines 180
col table_name for a15;
col column_name for a30;
col data_type for a15;
col data_default for a20;
col hidden_column for a15;
col virtual_column for a15;

select table_name,
       column_name,
       data_type,
       data_default,
       hidden_column,
       virtual_column
  from user_tab_cols
 where table_name='T_HIDDEN';

TABLE_NAME   COLUMN_NAME                                DATA_TYPE     DATA_DEFAULT         HIDDEN_COLUMN   VIRTUAL_COLUMN
---------------        ---------------------------------------------   ----------------     ---------------------------  ---------------------------   ---------------------------
T_HIDDEN        SYS_NC00003$                                 VARCHAR2     SUBSTR("DT",1,8)    YES                                YES
T_HIDDEN        DT                                                          VARCHAR2                                           NO                                 NO
T_HIDDEN        SYS_C00001_12020119:20:07$    VARCHAR2                                           YES                                NO

此时字段name已被重命名为SYS_C00001_12020119:20:07$,HIDDEN_COLUMN字段显示YES,此列已被隐藏,但不是虚拟列,即在段中还存在,仍占用存储空间(此种情况不再能查询此列内容)。此类字段命名规范如下:

字段名称共7段
1.SYS
2._
3.C
4.原字段序列,左补0至5位字符
5._
6.格式为 RRMMDDHH24:MI:SS 的时间
7.$
如上查询结果SYS_C00001_12020119:20:07$

注:以上为10g的结果。11g中新增了虚拟列功能,即可以直接声明虚拟字段,HIDDEN_COLUMN字段为NO,VIRTUAL_COLUMN为YES。详细语法请参考相应文档。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7417681/viewspace-715513/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: dg case 2
请登录后发表评论 登录
全部评论

注册时间:2011-05-12

  • 博文量
    66
  • 访问量
    349775