sql - "Missing Keyword"在 Oracle SQL Developer 中创建表时

标签 sql database oracle foreign-keys ddl

我不断得到

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

关于sql - "Missing Keyword"在 Oracle SQL Developer 中创建表时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463940/

相关文章:

c++ - 在流中查找单词序列频率的最佳算法是什么

C#更新数据库

sql - 如何创建从表中的最大值开始的 Oracle 序列?

python - 在 SQLAlchemy 中将字符串转换为日期时间戳

php - 跨 2 列的 PostgreSQL 10 约束?

php - 具有 3 个外键的数据透视表的 Eloquent 模型?

java - Oracle 重命名列名后出现无效标识符错误

php - 想要合并两个 sql 查询以获得共同的结果

sql - 是否有一个网站可以粘贴 SQL 插入语句并让它按列分解?

oracle - 为什么 Oracle 会吃掉我的字符串?