【问题标题】:Column name is masked in oracle indexes列名在 oracle 索引中被屏蔽
【发布时间】:2013-06-07 12:11:44
【问题描述】:

我在 oracle db 中有一个表,它有一个由两列(idvalid_from)组成的唯一索引。列 valid_from 是带时区的时间戳类型。
当我查询 SYS.USER_IND_COLUMNS 以查看我的表使用哪些列作为唯一索引时,我看不到 valid_from 列的名称,而是看到类似 SYS_NC00027$。

有没有可能我可以显示名称 valid_from 而不是 SYS_NC00027$.

【问题讨论】:

  • 能否附上查询USER_IND_COLUMNS视图的实际结果?

标签: oracle indexing


【解决方案1】:

显然,Oracle 为timestamp with time zone 列创建了一个基于函数的索引。

它们的定义可以在视图ALL_IND_EXPRESSIONS中找到

这样的事情应该可以帮助您入门:

select ic.index_name, 
       ic.column_name,
       ie.column_expression
from all_ind_columns ic
  left join all_ind_expressions ie 
    on ie.index_owner = ic.index_owner
   and ie.index_name = ic.index_name
   and ie.column_position = ic.column_position
where ic.table_name = 'FOO';

很遗憾,column_expression 是一个(已弃用的)LONG 列,不能轻易用于coalesce()nvl() 函数。

【讨论】:

    【解决方案2】:

    使用以下验证 col 信息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多