18

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

它在 SQL Server 中类似于: IF NOT EXISTS (SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // 然后创建我的 myIndex

4

1 回答 1

37

select count(*) from user_indexes where index_name = 'myIndex'

但是,sqlplus 不支持 IF...,因此您必须使用匿名 PL/SQL 块,这意味着立即执行来执行 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 以全部大写形式存储未引用的对象名称。

于 2009-03-12T20:48:49.080 回答