SQL: ORA-00906: отсутствует левая скобка - PullRequest
1 голос
/ 12 мая 2019

Я столкнулся с проблемой с CREATE TABLE:

Вот моя инструкция:

CREATE TABLE PRATICIEN (
num_pra INTEGER PRIMARY KEY,
nom_pra VARCHAR(30) NOT NULL,
FOREIGN KEY code_etage REFERENCES ETAGE(code_etage));

ORA-00906: пропущена левая скобка 00906. 00000 - «пропущена левая скобка»

ETAGE существует, и эта таблица была создана без ошибки:

CREATE TABLE ETAGE (
code_etage SMALLINT PRIMARY KEY,
designation VARCHAR(30));

Ответы [ 3 ]

3 голосов
/ 12 мая 2019

Вам нужны круглые скобки вокруг ссылки на внешний ключ. Так определяется синтаксис.

Вам также необходимо объявить столбец. FOREIGN KEY является атрибутом столбца, а не определением столбца:

CREATE TABLE PRATICIEN (
    num_pra INTEGER PRIMARY KEY,
    nom_pra VARCHAR(30) NOT NULL,
    code_etage SMALLINT,
    FOREIGN KEY (code_etage) REFERENCES ETAGE(code_etage)
);

Здесь - это дБ <> скрипка.

2 голосов
/ 12 мая 2019

Вы можете просто удалить ключевое слово FOREIGN KEY:

CREATE TABLE PRATICIEN (
    num_pra INTEGER PRIMARY KEY,
    nom_pra VARCHAR(30) NOT NULL,
    code_etage REFERENCES ETAGE(code_etage)  -- please note that type is inferred
);

db <> fiddle demo

1 голос
/ 12 мая 2019

Простейшим будет

create table praticien
( num_pra    integer primary key
, nom_pra    varchar2(30) not null
, code_etage references etage );

Однако указание указанного столбца может считаться оптимальной практикой, если ETAGE имеет более одного уникального ограничения:

create table praticien
( num_pra    integer primary key
, nom_pra    varchar2(30) not null
, code_etage references etage(code_etage) );

(ПоКстати, обратите внимание, что в Oracle это varchar2, а не varchar.)

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