ORA-00907: отсутствует ошибка правой скобки при создании таблицы?

Я новичок в oracle, Я создал две таблицы, используя следующие запросы,

CREATE TABLE employee
(
 emp_name VARCHAR(20) NOT NULL,
 street VARCHAR(50) NOT NULL,
 city VARCHAR(20) NOT NULL,
 PRIMARY KEY(emp_name)
)

и

CREATE TABLE company
(
 comp_name VARCHAR(20) NOT NULL,
 city VARCHAR(20) NOT NULL,
 PRIMARY KEY(comp_name)
)

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

CREATE TABLE works
(
emp_name varchar(20) NOT NULL,
comp_name varchar(20) NOT NULL,
salary  int(10) NOT NULL,
FOREIGN KEY(emp_name) REFERENCES employee(emp_name),
FOREIGN KEY(comp_name) REFERENCES company(comp_name)
)

ошибка получения: ORA-00907: отсутствует правая скобка

Я также пробовал с

CREATE TABLE works
(
emp_name varchar(20) NOT NULL,
comp_name varchar(20) NOT NULL,
salary  int(10) NOT NULL,
constraint wemployee FOREIGN KEY(emp_name) REFERENCES employee(emp_name),
constraint wcompany FOREIGN KEY(comp_name) REFERENCES company(comp_name)
)

но получение той же ошибки. Может ли кто-нибудь сказать мне, где я делаю ошибку?

4 ответов


Я не эксперт в oracle, но вы можете указать (10) на salary int(10) NOT NULL?


1: у вас должна быть таблица под названием "test" с двумя столбцами, id и testdata. (Это просто глупый быстрый пример, поэтому я не буду утруждать себя указанием каких-либо ограничений на id.)

create table test (id number, testdata varchar2(255));

2: Далее мы создадим последовательность для использования id-номеров в нашей тестовой таблице.

create sequence test_seq 
start with 1 
increment by 1 
nomaxvalue;

вы можете изменить "начать с 1" на любое число, с которого хотите начать (например, если у вас уже есть 213 записей в таблице, и вы хотите начать использовать это для своей 214-й записи, замените на "начнем с 214"). По умолчанию используется предложение "increment by 1", поэтому его можно опустить. Вы также можете заменить его на "increment by n", если хотите, чтобы он пропускал N-1 чисел между номерами идентификаторов. "Nomaxvalue" говорит ему продолжать увеличивать навсегда, а не сбрасывать в какой-то момент.я (я уверен, что Oracle имеет некоторые ограничения на то, насколько он может быть большим, но я не знаю, что это за предел).

3: Теперь мы готовы создать триггер, который будет автоматически вставлять номер из последовательность в столбце ID.

create trigger test_trigger
before insert on test
for each row beginselect test_seq.nextval into :new.id from dual;
end;
/

при создании индекса, встроенного в остальную часть инструкции создания таблицы, попробуйте удалить FOREIGN KEY детали:

CREATE TABLE works
(
emp_name varchar(20) NOT NULL,
comp_name varchar(20) NOT NULL,
salary  int(10) NOT NULL,
emp_name REFERENCES employee(emp_name),
comp_name REFERENCES company(comp_name)
)

см. этот вопрос для получения более подробной информации:

ORA-00907: отсутствует правая скобка


вот смотри есть два различных способа создания таблицы с constriants.

1) создать отдел таблиц( deptno номер (5) первичный ключ, deptname varchar2(30), empno номер (5) ссылки emp (empno));

2) Создайте отдел таблицы( deptno номер(5), deptname varchar2(30), количество empno(5), ограничение pkey_deptno первичный ключ (deptno), ограничение fkey_empno внешний ключ (empno) ссылки Emp (empno));