Как проверить индекс в Oracle - PullRequest
14 голосов
/ 12 марта 2009

Я пишу сценарий обновления схемы для продукта, который зависит от базы данных Oracle. В одной области мне нужно создать индекс для таблицы - если этот индекс еще не существует. Есть ли простой способ проверить наличие индекса, имя которого я знаю в сценарии Oracle?

Это было бы похоже на это в SQL Server: ЕСЛИ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ИЗ СИНДЕКСА, ГДЕ ИМЯ = 'myIndex') // Затем создаем мой myIndex

1 Ответ

31 голосов
/ 12 марта 2009

выберите количество (*) из пользовательских индексов, где 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 хранит имена объектов без кавычек в верхнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...