我是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:缺少右括号