1

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

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

4

2 回答 2

2

显然,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()ornvl()函数中使用。

于 2013-06-07T12:44:06.227 回答
0

使用以下内容来验证 col 信息。

select column_name,virtual_column,hidden_column,data_default from user_tab_cols where table_name='EMP';
于 2020-04-21T13:10:50.157 回答