Неправильная схема железной дороги для ALTER TABLE с несколькими внешними ограничениями? - PullRequest
5 голосов
/ 08 октября 2019

В настоящее время используется 18c, но это явное несоответствие присутствует в более ранних версиях (конечно, обратно в 11g).

В этом конкретном случае я добавляю несколько внеплановых ограничений в существующую таблицу.

Все железнодорожные схемы находятся здесь: https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/ALTER-TABLE.html

Это железнодорожная схема для ALTER TABLE:

enter image description here

Затем это железнодорожная схема для constraint_clauses:

enter image description here

Наконец, это железнодорожная схема для out_of_line_constraint:

enter image description here

На диаграмме железной дороги нет ( и ) или ,. Но запрос SQL должен иметь их.

Вот код, который работает:

Create table a ( x number );

Alter table a add (
  constraint x1 check ( x > 0 ),
  constraint x2 check ( x < 10)
);

Где моя ошибка в чтении и интерпретации железнодорожной схемы? Есть что-то еще, что я должен знать?

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Вам не нужно скобки или запятые. Это работает:

alter table a 
  add constraint x1 check (x > 0)
  add constraint x2 check (x < 10);

Но в любом случае это ошибка документации, поскольку схема железной дороги не указывает на то, что ссылка "constraint_clauses" повторяется.

1 голос
/ 10 октября 2019

Создание таблицы документов , включая скобки:

Для одного оператора ограничения скобки необязательны, например:

Alter table a add constraint x1 check ( x > 0 )

Я не вижу скобок для ограничения в документе, который, как вы обнаружили, отсутствует.

Вот документ с полным синтаксисом оракула

...