Получение неверного типа данных при создании таблицы в Oracle - PullRequest
0 голосов
/ 08 ноября 2018

Итак, я добавил столбец в таблицу с именем FACILITY.Затем я попытался СОЗДАТЬ таблицу с именем CLUBMANAGER, и меня приветствует сообщение:

ERROR at line 2:
ORA-00902: invalid datatype

Мои операторы SQL:

CREATE TABLE FACILITY(
facilityName    VARCHAR2(50)    NOT NULL,
rate            NUMBER(7,2),
status          VARCHAR2(25),
CONSTRAINT FACILITY_PKEY PRIMARY KEY(facilityName) );

ALTER TABLE FACILITY ADD MANAGER_EMAIL VARCHAR2(100);
ALTER TABLE facility ADD CONSTRAINT pk_fac UNIQUE (manager_email);
CREATE TABLE CLUBMANAGER (
    email       VARCHAR2(100)   NOT NULL,
    name        VARCHAR2(100)   NOT NULL,
    phoneNum    NUMBER(10)      NOT NULL,
    CONSTRAINT  CLUBMANAGER_PKEY PRIMARY KEY (email),
    CONSTRAINT  CLUBMEMBER_FKEY FOREIGN KEY (email) REFERENCES FACILITY (MANAGER_EMAIL));

Строка 2 была:

email       VARCHAR2(100)   NOT NULL

Мой вывод SQL:

    SQL> ALTER TABLE facility ADD CONSTRAINT pk_fac UNIQUE (manager_email);

Table altered.

SQL> CREATE TABLE CLUBMANAGER (
  2  emailVARCHAR(100)NOT NULL,
  3  nameVARCHAR(100)NOT NULL,
  4  phoneNumNUMBER(10)NOT NULL,
  5  CONSTRAINTCLUBMANAGER_PKEY PRIMARY KEY (email),
  6  CONSTRAINTCLUBMEMBER_FKEY FOREIGN KEY (email) REFERENCES FACILITY (MANAGER_EMAIL));
emailVARCHAR(100)NOT NULL,
            *
ERROR at line 2:
ORA-00902: invalid datatype

Я использую Oracle Database XE 11.2.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

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

Посмотрите: во-первых, таблица пустышка FACILITY, измененная, как вы это сделали:

SQL> CREATE TABLE facility (id NUMBER);

Table created.

SQL> ALTER TABLE facility ADD manager_email VARCHAR2 (100);

Table altered.

Создать таблицу CLUBMANAGER:

SQL> CREATE TABLE clubmanager
  2  (
  3     email      VARCHAR2 (100) NOT NULL,
  4     name       VARCHAR2 (100) NOT NULL,
  5     phonenum   NUMBER (10) NOT NULL,
  6     CONSTRAINT clubmanager_pkey PRIMARY KEY (email),
  7     CONSTRAINT clubmember_fkey FOREIGN KEY
  8        (email)
  9         REFERENCES facility (manager_email)
 10  );
       REFERENCES facility (manager_email)
                            *
ERROR at line 9:
ORA-02270: no matching unique or primary key for this column-list

Нет, не будет работать. Добавьте уникальный ключ и ящик CLUBMANAGER еще раз:

SQL> ALTER TABLE facility ADD CONSTRAINT pk_fac UNIQUE (manager_email);

Table altered.

SQL> CREATE TABLE clubmanager
  2  (
  3     email      VARCHAR2 (100) NOT NULL,
  4     name       VARCHAR2 (100) NOT NULL,
  5     phonenum   NUMBER (10) NOT NULL,
  6     CONSTRAINT clubmanager_pkey PRIMARY KEY (email),
  7     CONSTRAINT clubmember_fkey FOREIGN KEY
  8        (email)
  9         REFERENCES facility (manager_email)
 10  );

Table created.

SQL>

Как видите, все в порядке. Если он по-прежнему не работает на вашей стороне, пожалуйста, опубликуйте свой собственный сеанс SQL * Plus, чтобы мы могли увидеть, что вы сделали и как отреагировал Oracle.

0 голосов
/ 08 ноября 2018

Вам интересно получить ORA-00902.

РЕДАКТИРОВАТЬ: вам нужны пробелы между именами столбцов и типами данных и ограничения, такие как email VARCHAR(100) NOT NULL вместо emailVARCHAR(100)NOT NULL

Столбец MANAGER_EMAIL должен быть unique или primary key, так как на него может ссылаться foreign key.

Итак, используйте ALTER TABLE FACILITY ADD MANAGER_EMAIL VARCHAR2(100) primary key [unique] ;

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