【问题标题】:How To Check for an Index in Oracle如何在 Oracle 中检查索引
【发布时间】:2009-03-13 19:36:06
【问题描述】:

我正在为依赖于 Oracle 数据库的产品编写架构升级脚本。在一个领域,我需要在表上创建一个索引——如果该索引尚不存在。有没有一种简单的方法可以检查是否存在我知道 Oracle 脚本中的名称的索引?

在 SQL Server 中与此类似: 如果不存在(SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // 然后创建我的 myIndex

【问题讨论】:

    标签: oracle metadata


    【解决方案1】:

    从 user_indexes 中选择 count(*),其中 index_name = 'myIndex'

    不过,sqlplus 不支持 IF...,因此您必须使用匿名 PL/SQL 块,这意味着 EXECUTE IMMEDIATE 来执行 DDL。

    DECLARE
        i INTEGER;
    BEGIN
        SELECT COUNT(*) INTO i FROM user_indexes WHERE index_name = 'MYINDEX';
        IF i = 0 THEN
            EXECUTE IMMEDIATE 'CREATE INDEX myIndex ...';
        END IF;
    END;
    /
    

    编辑:正如所指出的,Oracle 以全大写形式存储不带引号的对象名称。

    【讨论】:

    • 除非您引用它们,否则数据库对象(包括索引)以大写形式存储。所以如果你做一个 CREATE INDEX myIndex,那么在 USER_INDEXES 中它将被存储为 MYINDEX。 Oracle(默认情况下)不会进行不区分大小写的匹配。
    • 除了这个答案:如果您需要检查索引是否存在于另一个模式中,请查询 ALL_INDEXES 而不是使用 USER_INDEXES。检查 USER_INDEXES 不适用于“ALTER SESSION SET CURRENT_SCHEMA = XYZ”,您仍将查询当前登录用户的索引。
    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2012-09-04
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多