我正在为依赖于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将非引号对象名称全部存储在大写中.