2013-04-23 2 views
0

Я пытаюсь создать таблицу с индексом, но это вызывает ошибку ORA-00907, в которой говорится, что мне не хватает правильных круглых скобок. Вот мой пример sql, который вызывает ошибку.Ошибка: Отсутствует правильная скобка при создании индекса на Oracle

create table example 
(
    id number(12, 0) not null using index (create index example_idx on example(id)) 
); 

Возможно, это из-за неопределенных ключевых слов, но я не понимаю, почему он запрашивает правильную скобку.

ответ

2

create table и create index - это отдельные операторы, вы не можете их смешивать (хотя вы можете иметь индекс неявно или явно созданный для резервного копирования уникального или основного ограничения ключа, которое вы определяете в строке).

Вы должны сделать это в два этапа, как два отдельных заявления:

create table example (id number(12, 0) not null); 
create index example_idx on example(id); 

пример вы показываете из here:

CREATE TABLE a (
a1 INT PRIMARY KEY USING INDEX (create index ai on a (a1))); 

находится в разделе под названием «Задание Индекс, связанный с ограничением ', и создает индекс как часть ограничения первичного ключа. Оговорка using index описана here.

В коде вы создали ненулевое ограничение, которое не поддерживается индексом, так что предложение здесь недействительно. Этот метод создания индекса можно использовать только в том случае, если он предназначен для поддержки уникального или первичного ключа, как указано в приведенной вами ссылке.

+0

http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm Эта ссылка показывает тот же путь (см. Пример 1). – randacun

+0

@randacun - он делает, но только для уникальных ограничений и ограничений первичного ключа, и вы не создаете один из них; только ограничение, отличное от нуля. Я обновил ответ, надеюсь, уточнить это. –

+0

Спасибо, я, вероятно, придерживаюсь объявления индекса отдельно. – randacun

Смежные вопросы