【问题标题】:How do I find all the functional indexes on a column in Oracle如何在 Oracle 中找到列上的所有功能索引
【发布时间】:2010-12-26 14:10:30
【问题描述】:

假设我有一个程序在数据库转换过程中搜索数据库以查找要修改的列。

如果我尝试更改定义了功能索引的列,则会出现以下错误:

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

Looking up the ORA code,解决方案是“在尝试修改列之前删除功能索引。”

太棒了!那么如何找到该列上的所有功能索引呢?

user_ind_columns 视图看起来是一个好的开始,但功能索引在其COLUMN 列中有类似“SYS_NC00042$”的内容。环顾其他user_ 视图,我没有看到任何明显的东西。我错过了什么吗?

还是我完全走错了路?

【问题讨论】:

    标签: oracle plsql indexing


    【解决方案1】:

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

    Oracle 11.2 link

    【讨论】:

    • 我希望只是列名,但我认为使用 `like '%COLUMN_NAME%' 的误报概率相当低(无论如何这并不是什么悲剧)。跨度>
    • 我不知道更好的方法。
    【解决方案2】:

    查看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
    

    【讨论】:

    • 这显示了表上的任何功能索引,但它无助于识别哪些索引(如果有)引用了特定列。
    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多