【发布时间】:2009-03-13 19:36:06
【问题描述】:
我正在为依赖于 Oracle 数据库的产品编写架构升级脚本。在一个领域,我需要在表上创建一个索引——如果该索引尚不存在。有没有一种简单的方法可以检查是否存在我知道 Oracle 脚本中的名称的索引?
在 SQL Server 中与此类似: 如果不存在(SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // 然后创建我的 myIndex
【问题讨论】:
我正在为依赖于 Oracle 数据库的产品编写架构升级脚本。在一个领域,我需要在表上创建一个索引——如果该索引尚不存在。有没有一种简单的方法可以检查是否存在我知道 Oracle 脚本中的名称的索引?
在 SQL Server 中与此类似: 如果不存在(SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // 然后创建我的 myIndex
【问题讨论】:
从 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 以全大写形式存储不带引号的对象名称。
【讨论】: