我是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)
)
但得到同样的错误。 任何人都可以告诉我,我在哪里做错了吗?
答案 0 :(得分:4)
我不是oracle的专家,但您是否可以在(10)
中指定salary int(10) NOT NULL
?
答案 1 :(得分:2)
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”子句是默认值,因此您可以省略它。如果您希望在ID号之间跳过n-1个数字,也可以用“increment by n”替换它。 “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;
/
答案 2 :(得分:1)
当使用表创建语句的其余部分内联创建索引时,请尝试删除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)
)
有关详细信息,请参阅此问题:
答案 3 :(得分:1)
创建具有约束的表有两种不同的方法:
1)
create table department(
deptno number(5) primary key,
deptname varchar2(30),
empno number(5) references emp(empno));
2)
create table department(
deptno number(5),
deptname varchar2(30),
empno number(5),
constraint pkey_deptno primary key(deptno),
constraint fkey_empno foreign key(empno) references Emp(empno));