"缺少关键字"在Oracle SQL Developer

时间:2015-11-01 15:38:23

标签: sql database oracle foreign-keys ddl

我一直在

  

" SQL错误:ORA - 00905:缺少关键字"在"创建表"

我的部分代码如下所示:

    CREATE TABLE Orders (
    Received CHAR(9),
    Shipped CHAR(9),
    FOREIGN KEY (Ono), REFERENCES Odetails (Ono),
    FOREIGN KEY (Cno), REFERENCES customers (Cno),
    FOREIGN KEY (Eno), REFERENCES employee (Eno), 
    PRIMARY KEY (Ono, Cno, Eno)
    );

    CREATE TABLE ZIPCODES (
    ZIP CHAR(5) NOT NULL,
    City CHAR(20),
    FOREIGN KEY (ZIP), REFERENCES customers (ZIP),
    PRIMARY KEY (ZIP) 
    );

但是,我在同一个工作表中编写了这段代码,并没有得到任何错误:

    CREATE TABLE Odetails (
    Ono CHAR(4) NOT NULL,
    Pno CHAR(5) NOT NULL,
    Qty CHAR(1),
    FOREIGN KEY (Pno), REFERENCES parts (Pno),
    PRIMARY KEY (Ono) 
    );

任何人都可以帮我确定导致错误的原因吗?

2 个答案:

答案 0 :(得分:2)

1)不要使用逗号

2)定义列

CREATE TABLE Orders (
    Received CHAR(9),
    Shipped CHAR(9),
    Ono INT NOT NULL ,   -- your missing columns (add datatype you need)
    Cno INT NOT NULL,
    Eno INT NOT NULL,
    FOREIGN KEY (Ono) REFERENCES Odetails (Ono),  -- here no comma inside
    FOREIGN KEY (Cno) REFERENCES customers (Cno),
    FOREIGN KEY (Eno) REFERENCES employee (Eno), 
    PRIMARY KEY (Ono, Cno, Eno)
    );

CREATE TABLE ZIPCODES (
    ZIP CHAR(5) NOT NULL,
    City CHAR(20),
    FOREIGN KEY (ZIP) REFERENCES customers (ZIP),
    PRIMARY KEY (ZIP) 
    );

考虑使用VARCHAR2数据类型而不是CHAR

您还可以使用内联语法,如:

CREATE TABLE Orders (
  ...
   Ono INT NOT NULL REFERENCES Odetails (Ono)
  ...
);

或添加显式约束名称:

CREATE TABLE Orders (
      ...
       Ono INT NOT NULL,
      ...
      CONSTRAINT FK_Orders_Odetails_Ono  FOREIGN KEY (Ono) REFERENCES Odetails (Ono),
      ...
);

答案 1 :(得分:0)

删除外键后的comma,使它看起来像:

CREATE TABLE Orders (
Received CHAR(9),
Shipped CHAR(9),
FOREIGN KEY (Ono) REFERENCES Odetails (Ono),--are you defining this Ono?
FOREIGN KEY (Cno) REFERENCES customers (Cno),
FOREIGN KEY (Eno) REFERENCES employee (Eno), 
PRIMARY KEY (Ono, Cno, Eno)
);