ORA-00907:创建表时缺少右括号错误?

时间:2012-10-08 01:53:18

标签: oracle 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 个答案:

答案 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)
)

有关详细信息,请参阅此问题:

ORA-00907: missing right parenthesis

答案 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));