8

我是 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

4 回答 4

6

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

于 2012-10-08T02:06:54.080 回答
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”告诉它永远保持递增,而不是在某个时候重置。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;
/
于 2013-07-14T18:34:14.973 回答
2

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

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));  
于 2013-06-13T09:22:59.557 回答
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: 缺少右括号

于 2012-10-08T02:06:36.593 回答