2016-08-03 8 views
0
CREATE TABLE Emp OF Emp_t(eno PRIMARY KEY, edept REFERENCES Dept); 

Там, где находится PRIMARY KEY, он отображает синтаксическую ошибку, как ожидалось, не null. Мне нужно это решить.Ошибка синтаксиса в Oracle create table query

Ниже приведена остальная часть запросов в этой схеме.

CREATE TYPE Emp_t AS OBJECT(eno number(4),ename varchar2(15),edept ref dept_t,salary number(8,2)); 
/

CREATE TYPE Dept_t AS OBJECT(dno number(2),dname varchar2(12),mgr ref emp_t); 
/

CREATE TYPE Proj_t AS OBJECT(pno number(4),pname varchar2(15),pdept ref dept_t,budget number(10,2)); 
/

CREATE TABLE Dept OF Dept_t(dno PRIMARY KEY, mgr REFERENCES Emp); 

CREATE TABLE Proj OF Proj_t(pno PRIMARY KEY, pdept REFERENCES dept); 

Ошибка показана на следующем изображении. enter image description here

+0

вы способны создать любой из тех, таблицы, поскольку они ссылаются друг на друга? (Как и типы, поэтому 'dept_t' в действии сразу после создания и должен быть скомпилирован неявно в этом случае с помощью' create table dept', даже если это не удается). –

+0

Сначала я мог выполнить все запросы запроса типа. Но тогда при попытке выполнить создание таблицы он вызывает ошибку выше. –

+0

Невозможно создать таблицу. Только создавать типы –

ответ

0

Как предложил @LostInAlabama, вы можете создать таблицы и добавить круговые ограничения впоследствии:

CREATE TABLE Dept OF Dept_t(dno PRIMARY KEY); 
CREATE TABLE Proj OF Proj_t(pno PRIMARY KEY); 
CREATE TABLE Emp OF Emp_t(eno PRIMARY KEY); 

ALTER TABLE Dept MODIFY (mgr REFERENCES Emp); 

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

ALTER TABLE Dept ADD (CONSTRAINT Dept_FK_Emp FOREIGN KEY (mgr) REFERENCES Emp); 
ALTER TABLE Emp ADD (CONSTRAINT Emp_FK_Dept FOREIGN KEY (edept) REFERENCES Dept); 
ALTER TABLE Proj ADD (CONSTRAINT Proj_FK_Dept FOREIGN KEY (pdept) REFERENCES Dept); 
Смежные вопросы