我正在为依赖于Oracle数据库的产品编写模式升级脚本.在一个领域,我需要在表上创建一个索引 - 如果该索引尚不存在.有没有一种简单的方法可以检查是否存在我知道Oracle脚本名称的索引?
它与SQL Server中的类似:IF NOT EXISTS(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以非全部大写形式存储未加引号的对象名称.