Ошибка создания неверного идентификатора таблицы Oracle - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать таблицу в Oracle 11g, но получил ошибку ORA-00904. Синтаксис для создания таблицы:

CREATE TABLE Worker(
nif VARCHAR2(9 CHAR) CONSTRAINT PK_Nif PRIMARY KEY,
nameworker VARCHAR2(50 CHAR) CONSTRAINT NN_NameWorker NOT NULL,
specialty VARCHAR2(50 CHAR) CONSTRAINT NN_Specialty NOT NULL,
CONSTRAINT CH_Speciality CHECK (speciality ='ENGINEERING' OR speciality= 'SUPPORT' OR speciality='DEVELOPMENT'),
yearsold INTEGER,
CONSTRAINT CH_Years CHECK (yearsold >= 1),
CONSTRAINT NN_Years NOT NULL,
nifCompany VARCHAR2(9 CHAR) CONSTRAINT NN_NifCompany NOT NULL,
CONSTRAINT FK_NifCompany FOREIGN KEY (nifCompany) REFERENCES Company(nif)
);

И ошибка, которую я получил:

ORA-00904: : invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:

Я не знаю, где ошибка.

Ответы [ 2 ]

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

У вас есть пара проблем; Непосредственная причина ошибки - эта строка:

CONSTRAINT NN_Years NOT NULL,

, который, исходя из более ранних имен, вы, вероятно, намеревались включить inline с определением столбца:

yearsold INTEGER CONSTRAINT NN_Years NOT NULL,
CONSTRAINT CH_Years CHECK (yearsold >= 1),

Вторая проблема заключается в том, что у вас есть несовместимые имена, specialty в определении столбца против speciality в проверочном ограничении; поэтому вам нужно исправить имена столбцов и ненулевые ограничения:

speciality VARCHAR2(50 CHAR) CONSTRAINT NN_Specialty NOT NULL,

Исправление этих вещей и при условии, что у вас есть таблица Company с соответствующим PK для FK, который это указывает, дает вам:

CREATE TABLE Worker(
  nif VARCHAR2(9 CHAR) CONSTRAINT PK_Nif PRIMARY KEY,
  nameworker VARCHAR2(50 CHAR) CONSTRAINT NN_NameWorker NOT NULL,
  speciality VARCHAR2(50 CHAR) CONSTRAINT NN_Specialty NOT NULL,
  CONSTRAINT CH_Speciality CHECK (speciality = 'ENGINEERING'
    OR speciality = 'SUPPORT' OR speciality = 'DEVELOPMENT'),
  yearsold INTEGER CONSTRAINT NN_Years NOT NULL,
  CONSTRAINT CH_Years CHECK (yearsold >= 1),
  nifCompany VARCHAR2(9 CHAR) CONSTRAINT NN_NifCompany NOT NULL,
  CONSTRAINT FK_NifCompany FOREIGN KEY (nifCompany) REFERENCES Company(nif)
);

Table WORKER created.

desc worker

Name       Null?    Type              
---------- -------- ----------------- 
NIF        NOT NULL VARCHAR2(9 CHAR)  
NAMEWORKER NOT NULL VARCHAR2(50 CHAR) 
SPECIALITY NOT NULL VARCHAR2(50 CHAR) 
YEARSOLD   NOT NULL NUMBER(38)        
NIFCOMPANY NOT NULL VARCHAR2(9 CHAR)  
0 голосов
/ 13 ноября 2018

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

CREATE TABLE Worker(
nif VARCHAR2(9 CHAR) ,
nameworker VARCHAR2(50 CHAR) ,
specialty VARCHAR2(50 CHAR),
CONSTRAINT CH_Speciality CHECK (speciality ='ENGINEERING' OR speciality= 'SUPPORT' OR speciality='DEVELOPMENT'),
yearsold INTEGER,
CONSTRAINT CH_Years CHECK (yearsold >= 1),
CONSTRAINT NN_Years check(yearold is NOT NULL),
nifCompany VARCHAR2(9 CHAR) ,
CONSTRAINT FK_NifCompany FOREIGN KEY (nifCompany) REFERENCES Company(nif),
CONSTRAINT PK_Nif PRIMARY KEY(nif),
CONSTRAINT NN_NameWorker check(nameworker is NOT NULL),
CONSTRAINT NN_Specialty check(specialty is NOT NULL),
CONSTRAINT NN_NifCompany check(nifCompany is NOT NULL)
);

Дайте мне знать, если у вас возникнут дополнительные проблемы

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