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 ответов
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)
)
см. этот вопрос для получения более подробной информации:
вот смотри есть два различных способа создания таблицы с 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));