Oracle中如何找到列上的所有功能索引

发布于 2024-08-14 16:39:00 字数 499 浏览 5 评论 0原文

假设我有一个程序,可以在数据库中搜索要修改的列,作为数据库转换过程的一部分。

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

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

查找 ORA 代码,解决方案是“在尝试修改列之前删除功能索引”。

伟大的!那么如何找到该列上的所有功能索引呢?

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

还是我完全以错误的方式处理这个问题?

Say I have a program that searches a database for columns to modify, as part of a database conversion process.

If I attempt to alter a column with a functional index defined gives the following error:

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

Looking up the ORA code, the solution is to "Drop the functional index before attempting to modify the column."

Great! So how do I find all the functional indexes on that column?

The user_ind_columns view looks like a good start, but functional indexes have things like "SYS_NC00042$" in their COLUMN column. Looking around the other user_ views, I'm not seeing anything obvious. Am I missing something?

Or am I going about this the wrong way entirely?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜警司 2024-08-21 16:39:00

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

Oracle 11.2 链接

The table user_ind_expressions describes expressions of function based indexes.

Oracle 11.2 link

箹锭⒈辈孓 2024-08-21 16:39:00

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

Look at the INDEX_TYPE column of USER_INDEXES:

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
葬心 2024-08-21 16:39:00

添加到迈克的回答
您可以使用ALL_INDEXES表中的FUNCIDX_STATUS,它会告诉您索引是否基于函数NULL,是否启用基于函数的索引< code>ENABLED 或基于功能的索引DISABLED

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

Adding to Mike's answer,
You can use the FUNCIDX_STATUS in ALL_INDEXES table which will tell you whether the index is functional based or not NULL, whether functional based index is enabled ENABLED or functional based index is DISABLED.

SELECT table_name, index_name FROM ALL_INDEXES WHERE FUNCIDX_STATUS != NULL ORDER BY table_name, index_name
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文