如何在Oracle中找到列上的所有函数索引

ohfgkhjo  于 2023-11-17  发布在  Oracle
关注(0)|答案(3)|浏览(152)

假设我有一个程序,作为数据库转换过程的一部分,它在数据库中搜索要修改的列。
如果我试图改变一个定义了函数索引的列,会出现以下错误:

ORA-30556: functional index is defined on the column to be modified

字符串
Looking up the ORA code,解决方案是“在尝试修改列之前删除函数索引”。
太好了!那么我如何找到该列上的所有函数索引呢?
user_ind_columns视图看起来是一个很好的开始,但是函数索引在它们的COLUMN列中有类似“SYS_NC00042$”的东西。环顾其他user_视图,我没有看到任何明显的东西。我错过了什么吗?
还是我完全走错路了

jchrr9hc

jchrr9hc1#

user_ind_expressions描述了基于函数的索引的表达式。
Oracle 11.2 link

7fyelxc5

7fyelxc52#

查看USER_INDEXESINDEX_TYPE列:

select table_name, index_name, index_type
from user_indexes
where index_type like 'FUNCTION%'
order by table_name, index_name

TABLE_NAME                      INDEX_NAME                      INDEX_TYPE                 
------------------------------  ------------------------------  ---------------------------
SOME_TABLE                      SOME_TABLE_FUNC_INDEX           FUNCTION-BASED NORMAL

字符串

j2datikz

j2datikz3#

添加到Mike's answer,您可以在ALL_INDEXES表中使用FUNCIDX_STATUS,该表将告诉您索引是否基于功能NULL,是否启用基于功能的索引ENABLED或基于功能的索引DISABLED

SELECT table_name, index_name FROM ALL_INDEXES WHERE FUNCIDX_STATUS != NULL ORDER BY table_name, index_name

字符串

相关问题