"Missing Keyword" 在 Oracle SQL 开发人员中创建 table

"Missing Keyword" When creating a table in Oracle SQL Developer

我不断收到

"SQL Error: ORA - 00905: missing keyword" in the "CREATE TABLE"

我的部分代码如下所示:

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

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

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

删除外键后的 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)
);