如何在 Oracle 中检查索引

发布于 2024-07-14 21:42:42 字数 225 浏览 8 评论 0原文

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

SQL Server 中的情况与此类似: 如果不存在(SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // 然后创建我的 myIndex

I am writing a schema upgrade script for a product that depends on an Oracle database. In one area, I need to create an index on a table - if that index does not already exist. Is there an easy way to check for the existence of an index that I know the name of in an Oracle script?

It would be similar to this in SQL Server:
IF NOT EXISTS (SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex')
// Then create my myIndex

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

飘落散花 2024-07-21 21:42:43

select count(*) from user_indexes where 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 以全部大写形式存储未加引号的对象名称。

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

sqlplus won't support IF..., though, so you'll have to use anonymous PL/SQL blocks, which means EXECUTE IMMEDIATE to do 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;
/

Edit: as pointed out, Oracle stores unquoted object names in all uppercase.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文