SQL错误:ORA-00904:表创建期间的标识符无效

时间:2018-07-22 00:13:14

标签: sql oracle sqlplus

customerorderInfo会自行创建,但其他表则不会并抛出错误。

CREATE TABLE customer (
customerID NUMBER PRIMARY KEY,
firstName VARCHAR2 (30) NOT NULL,
lastName VARCHAR2 (30) NOT NULL,
address VARCHAR2 (60),
city VARCHAR2 (30),
state VARCHAR2(20),
zipCode CHAR (5),
country VARCHAR2 (50),
phone CHAR (10),
email VARCHAR2 (30) NOT NULL UNIQUE,
username VARCHAR2 (20) NOT NULL UNIQUE,
password VARCHAR2 (20) NOT NULL
);

CREATE TABLE orderInfo (
orderID NUMBER PRIMARY KEY,
customerID NUMBER REFERENCES customer (customerID),
orderDate DATE,
shipDate DATE
);

CREATE TABLE orderDetail (
orderDetailID NUMBER PRIMARY KEY,
orderID NUMBER REFERENCES orderInfo (orderID),
productID VARCHAR2 (10) REFERENCES product (productID),
price NUMBER (7,2),
quantity NUMBER (CHECK > 0)
);

CREATE TABLE product (
productID VARCHAR2 (10) PRIMARY KEY,
categoryID VARCHAR2 (10) REFERENCES categoryInfo (categoryID),
productName VARCHAR2 (40),
productDescription VARCHAR2 (100),
unitPrice NUMBER,
picture BLOB,
);

CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR (50),
description VARCHAR2 (100),
);

2 个答案:

答案 0 :(得分:2)

非常接近。您的错误是:

  1. 指定的表顺序不正确。为了使外键引用有效,所引用的表必须已经存在:

    • product必须在orderDetail
    • 之前创建
    • categoryInfo必须在product
    • 之前创建
    • customer必须在orderInfo
    • 之前创建
    • 因此,表的合理创建顺序为:customercategoryInfoorderInfoproductorderDetail
  2. productcategoryInfo中的每个最后一个字段都有一个结尾逗号,需要将其删除。

  3. 未正确指定orderDetail的检查约束。应该是

    quantity NUMBER CHECK(quantity > 0)

SQLFiddle here

答案 1 :(得分:1)

两件事:

  • 删除多余的逗号!
  • 请勿使用VARCHAR,而应使用VARCHAR2

它应该像这样:

CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR2 (50),
description VARCHAR2 (100)
);

顺便说一句,您需要确保以正确的顺序创建表。否则,当一个表引用另一个不存在的表时,它将失败。创建顺序应为:

  1. 客户
  2. orderInfo
  3. categoryInfo
  4. 产品
  5. orderDetail