Получение ora-00907 пропускает правую круглую скобку при создании таблицы.Плохо знаком с базами данных, не знаю, что происходит - PullRequest
0 голосов
/ 26 сентября 2018

Я только начал посещать класс базы данных, и у меня появляется ошибка, я не знаю, как определить, что не так.Я получаю ORA-00907 с ошибкой в ​​правой скобке, хотя я не думаю, что пропустил какую-либо скобку.

Вот код:

SQL> CREATE TABLE SYSTEM_USER_LAB
2  (   SYSTEM_USER_LAB_ID int PRIMARY KEY
3  ,   SYSTEM_USER_NAME string NOT NULL
4  ,   SYSTEM_USER_GROUP_ID int FOREIGN KEY REFERENCES 
   COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
5  ,   SYSTEM_USER_TYPE int FOREIGN KEY REFERENCES 
   COMMON_LOOKUP_LAB(COMMON_LOOKUP_LAB_ID)
6  ,   FIRST_NAME string
7  ,   MIDDLE_NAME string
8  ,   LAST_NAME string
9  ,   CREATED_BY int FOREIGN KEY REFERENCES 
   SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
10  ,   CREATION_DATE DATE NOT NULL
11  ,   LAST_UPDATED_BY int FOREIGN KEY REFERENCES 
   SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
12  ,   LAST_UPDATE_DATE DATE NOT NULL);
,   SYSTEM_USER_GROUP_ID int FOREIGN KEY REFERENCES 
   COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
                         *
ERROR at line 4:
ORA-00907: missing right parenthesis

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы смешиваете синтаксис для встроенных и внеполосных ограничений .

Вы можете удалить часть FOREIGN KEY встроенных ограничений:

CREATE TABLE SYSTEM_USER_LAB
(   SYSTEM_USER_LAB_ID int PRIMARY KEY
,   SYSTEM_USER_NAME varchar2(10) NOT NULL
,   SYSTEM_USER_GROUP_ID int REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
,   SYSTEM_USER_TYPE int REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_LAB_ID)
,   FIRST_NAME varchar2(10)
,   MIDDLE_NAME varchar2(10)
,   LAST_NAME varchar2(10)
,   CREATED_BY int REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
,   CREATION_DATE DATE NOT NULL
,   LAST_UPDATED_BY int REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
,   LAST_UPDATE_DATE DATE NOT NULL);

или переключитесь на внеплановые ограничения:

CREATE TABLE SYSTEM_USER_LAB
(   SYSTEM_USER_LAB_ID int PRIMARY KEY
,   SYSTEM_USER_NAME varchar2(10) NOT NULL
,   SYSTEM_USER_GROUP_ID int
,   SYSTEM_USER_TYPE int
,   FIRST_NAME varchar2(10)
,   MIDDLE_NAME varchar2(10)
,   LAST_NAME varchar2(10)
,   CREATED_BY int
,   CREATION_DATE DATE NOT NULL
,   LAST_UPDATED_BY int
,   LAST_UPDATE_DATE DATE NOT NULL
,   CONSTRAINT FK_1 FOREIGN KEY (SYSTEM_USER_GROUP_ID)
      REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
,   CONSTRAINT FK_2 FOREIGN KEY (SYSTEM_USER_TYPE)
      REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_LAB_ID)
,   CONSTRAINT FK_3 FOREIGN KEY (CREATED_BY)
      REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
,   CONSTRAINT FK_4 FOREIGN KEY (LAST_UPDATED_BY)
      REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
);

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

Я также изменил string на varchar2(10), поскольку первый не является действительным типом данных .Опять же, убедитесь, что это действительно разумные размеры, я выбрал 10 наугад.И int не является встроенным типом данных, но это поддерживаемый тип ANSI SQL , так что все в порядке, но, возможно, немного необычно.

0 голосов
/ 26 сентября 2018

Довольно много проблем, таких как

  • string - неверный тип данных в Oracle
  • , на который вы ссылаетесь COMMON_LOOKUP_LAB, два его столбца (из system_user_group_id иsystem_user_type) - это правильно?Я создал его только для того, чтобы CREATE SYSTEM_USER_LAB работал, создавая один первичный и один уникальный ключ
  • ограничения внешнего ключа выглядят подозрительно

Вот мое предложение - посмотрите, как оно работает, настройте его, еслинеобходимо.

SQL> create table common_lookup_lab (common_lookup_id int primary key,
  2                                  common_lookup_lab_id int unique);

Table created.

SQL> create table system_user_lab
  2    (system_user_lab_id   int  constraint pk_sul primary key,
  3     system_user_name     varchar2(30) not null,
  4     system_user_group_id int constraint fk_sul_cll1
  5                              references common_lookup_lab (common_lookup_id),
  6     system_user_type     int constraint fk_sul_cll2
  7                              references common_lookup_lab (common_lookup_lab_id),
  8     first_name           varchar2(20),
  9     middle_name          varchar2(20),
 10     last_name            varchar2(20),
 11     created_by           int constraint fk_sul_sul1
 12                              references system_user_lab (system_user_lab_id),
 13     creation_date        date not null,
 14     last_updated_by      int constraint fk_sul_sul2
 15                              references system_user_lab (system_user_lab_id),
 16     last_update_date     date not null
 17    );

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