SQL Error: ORA-00904: invalid identifier during table creation
SQL Error: ORA-00904: invalid identifier during table creation
表 customer
和 orderInfo
可以自行创建,但其他表不会并抛出错误。
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),
);
两件事:
- 删除多余的逗号!
- 不要使用
VARCHAR
,而是 VARCHAR2
。
它应该看起来像:
CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR2 (50),
description VARCHAR2 (100)
);
顺便说一下,您需要确保以正确的顺序创建 table。否则当一个 table 引用另一个尚不存在时它将失败。创建顺序应该是:
- 顾客
- 订单信息
- 类别信息
- 产品
- 订单详情
非常接近。您的错误是:
指定的表顺序不正确。要使外键引用有效,引用的 table 必须已经存在:
product
必须在 orderDetail
之前创建
categoryInfo
必须在 product
之前创建
customer
必须在 orderInfo
之前创建
- 因此 table 的合理创建顺序是:
customer
、categoryInfo
、orderInfo
、product
、orderDetail
product
和 categoryInfo
中的最后一个字段都有一个尾随逗号,需要将其删除。
orderDetail
上的检查约束指定不正确。应该是
quantity NUMBER CHECK(quantity > 0)
表 customer
和 orderInfo
可以自行创建,但其他表不会并抛出错误。
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),
);
两件事:
- 删除多余的逗号!
- 不要使用
VARCHAR
,而是VARCHAR2
。
它应该看起来像:
CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR2 (50),
description VARCHAR2 (100)
);
顺便说一下,您需要确保以正确的顺序创建 table。否则当一个 table 引用另一个尚不存在时它将失败。创建顺序应该是:
- 顾客
- 订单信息
- 类别信息
- 产品
- 订单详情
非常接近。您的错误是:
指定的表顺序不正确。要使外键引用有效,引用的 table 必须已经存在:
product
必须在orderDetail
之前创建
categoryInfo
必须在product
之前创建
customer
必须在orderInfo
之前创建
- 因此 table 的合理创建顺序是:
customer
、categoryInfo
、orderInfo
、product
、orderDetail
product
和categoryInfo
中的最后一个字段都有一个尾随逗号,需要将其删除。orderDetail
上的检查约束指定不正确。应该是quantity NUMBER CHECK(quantity > 0)