При создании таблицы в базе данных oracle отображается ошибка пропуска правой скобки - PullRequest
0 голосов
/ 03 октября 2018

При создании таблицы в базе данных oracle отображается ошибка пропуска правой скобки

CREATE TABLE Catalog(
sid VARCHAR2(50) FOREIGN KEY REFERENCES Suppliers(sid),
pid VARCHAR2(50) FOREIGN KEY REFERENCES Parts(pid),
quantity VARCHAR2(50)
);

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Синтаксис ограничения задокументирован здесь .

inline_constraint :: = inline_constraint

out_of_line_constraint :: = out_of_line_constraint

reference_clause :: = enter image description here

Ваши примеры inline , так как они являются частью определения столбца, а не отдельного раздела или оператора.

Я бызапишите его как:

create table catalog
( sid       references suppliers(sid)
, pid       references parts(pid)
, quantity  varchar2(50) );

или, если бы я хотел назвать их явно:

create table catalog
( sid       constraint cat_supplier_fk references suppliers(sid)
, pid       constraint cat_part_fk references parts(pid)
, quantity  varchar2(50) );

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

0 голосов
/ 03 октября 2018

Вам необходимо удалить детали FOREIGN KEY как:

CREATE TABLE Catalog(
sid VARCHAR2(50) REFERENCES Suppliers(sid),
pid VARCHAR2(50) REFERENCES Parts(pid),
quantity VARCHAR2(50)
);

или вы можете создать как:

CREATE TABLE Catalog
( sid VARCHAR2(50),
  pid VARCHAR2(50),
  quantity VARCHAR2(50),
    CONSTRAINT fk_supplier
    FOREIGN KEY (sid)
    REFERENCES suppliers(sid),
    CONSTRAINT fk_parts
    FOREIGN KEY (pid)
    REFERENCES parts(pid)    
);

, определив FOREIGN CONSTRAINTS 'names

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

CREATE TABLE Catalog
( sid VARCHAR2(50),
  pid VARCHAR2(50),
  quantity VARCHAR2(50)  
);

ALTER TABLE Catalog
ADD CONSTRAINT fk_supplier
  FOREIGN KEY (sid)
  REFERENCES suppliers(sid);

ALTER TABLE Catalog
ADD CONSTRAINT fk_parts
  FOREIGN KEY (pid)
  REFERENCES parts(pid);  
...