【问题标题】:ORA-00907: missing right parenthesis Error while creating a table?ORA-00907: 创建表时缺少右括号错误?
【发布时间】:2012-09-28 06:34:07
【问题描述】:

我是甲骨文的新手, 我使用以下查询创建了两个表,

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 ora-00907


    【解决方案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));  
    

    【讨论】:

      【解决方案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;
      /
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 知道了兄弟!..谢谢 :) @pilotcam
        【解决方案4】:

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

        【讨论】:

        • 遇到同样的错误!。无论如何,谢谢。从 Pilotcam 得到答案。
        猜你喜欢
        • 1970-01-01
        • 2016-07-15
        • 2016-10-23
        • 2015-03-31
        • 1970-01-01
        • 2013-05-12
        • 2014-03-25
        • 1970-01-01
        相关资源
        最近更新 更多