У вас есть пара проблем; Непосредственная причина ошибки - эта строка:
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)