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

但得到了同样的错误。有人能告诉我我哪里做错了吗?

我不是oracle专家,但您可以在salary int(10) NOT NULL中指定(10)吗?

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开头"更改为任何想要以1开头的数字(例如,如果表中已经有213个条目,并且您想将其用于第214个条目,请将其替换为"以214开头")。"increment by 1"子句是默认子句,因此您可以省略它。如果您希望它跳过id号之间的n-1个数字,也可以用"incremental by n"替换它。"nomaxvalue"告诉它永远保持递增,而不是在某个时刻重置。i(我确信Oracle对它的规模有一些限制,但我不知道这个限制是什么)

3:现在我们准备创建一个触发器,该触发器将自动将序列中的下一个数字插入id列。

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

有两种不同的方法可以创建带有约束的表:

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

在与表创建语句的其余部分内联创建索引时,尝试删除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:缺少右括号

相关内容

  • 没有找到相关文章

最新更新