我在 oracle db 中有一个表,它有一个由两列(id
和valid_from
)组成的唯一索引。列 valid_from 是带时区的时间戳类型。
当我查询 SYS.USER_IND_COLUMNS 以查看我的表使用哪些列作为唯一索引时,我看不到该valid_from
列的名称,而是看到了SYS_NC00027$ 之类的东西。
有没有可能我可以显示名称valid_from 而不是SYS_NC00027$。?
显然,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()
函数中使用。
使用以下内容来验证 col 信息。
select column_name,virtual_column,hidden_column,data_default from user_tab_cols where table_name='EMP';