SQL 错误:ORA-00904:创建表期间标识符无效
Posted
技术标签:
【中文标题】SQL 错误:ORA-00904:创建表期间标识符无效【英文标题】:SQL Error: ORA-00904: invalid identifier during table creation 【发布时间】:2018-07-22 00:13:13 【问题描述】: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),
);
【问题讨论】:
需要定义表才能用于外键引用。 你不应该使用CHAR
。它所做的只是无缘无故地在每个值的末尾添加空格,浪费空间并导致比较错误。标准字符串类型是VARCHAR2
。此外,在将列定义为外键时,您不需要重复数据类型,因为它们将从引用的父列继承。
【参考方案1】:
非常接近。您的错误是:
指定的表格顺序不正确。要使外键引用有效,所引用的表必须已经存在:
product
必须在 orderDetail
之前创建
categoryInfo
必须在 product
之前创建
customer
必须在 orderInfo
之前创建
所以一个合理的表创建顺序是:customer
、categoryInfo
、orderInfo
、product
、orderDetail
product
和 categoryInfo
中的最后一个字段有一个尾随逗号,需要删除。
orderDetail
的检查约束指定不正确。应该是
quantity NUMBER CHECK(quantity > 0)
SQLFiddle here
【讨论】:
【参考方案2】:两件事:
去掉多余的逗号! 不要使用VARCHAR
,而是使用VARCHAR2
。
应该是这样的:
CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR2 (50),
description VARCHAR2 (100)
);
顺便说一下,您需要确保以正确的顺序创建表格。否则,当一个表引用另一个尚不存在的表时,它将失败。创建顺序应为:
-
客户
订单信息
类别信息
产品
订单详情
【讨论】:
谢谢,我应该检查一下,因为它完全有道理......我刚刚把我的头从桌子上敲了下来,哈哈!以上是关于SQL 错误:ORA-00904:创建表期间标识符无效的主要内容,如果未能解决你的问题,请参考以下文章
SQL 错误:ORA-00904: : 第 4 行中的标识符无效
无法使用外键创建表。错误:ORA-00904: : 无效标识符
SQL 错误 [904] [42000]:ORA-00904:“SPAREBOX”:无效标识符 [重复]