我正在为依赖于 Oracle 数据库的产品编写架构升级脚本。在一个领域,我需要在表上创建一个索引 - 如果该索引尚不存在。有没有一种简单的方法来检查我知道 Oracle 脚本中名称的索引是否存在?
它在 SQL Server 中类似于: IF NOT EXISTS (SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // 然后创建我的 myIndex
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 以全部大写形式存储未引用的对象名称。