无法定位该SQL建表语句错误,请求分析ORA-00904无效标识符报错
ORA-00904无效标识符:Inventory表建表语句错误排查
执行以下建表语句时触发ORA-00904: 无效标识符错误,可从以下方向排查:
CREATE TABLE Inventory ( InventoryNumber INT PRIMARY KEY, ProductCode VARCHAR(10), ColorCode VARCHAR(10), Size VARCHAR(10) NOT NULL, Price DECIMAL(10,2) NOT NULL, QuantityOnHand INT NOT NULL, CONSTRAINT CHK_Inventory_Size CHECK (Size IN ('S', 'M', 'L', 'XL', 'XXL')), CONSTRAINT CHK_Inventory_Price CHECK (Price <= 9999.99), CONSTRAINT CHK_Inventory_QuantityOnHand CHECK (QuantityOnHand >= 0), CONSTRAINT FK_Inventory_Product FOREIGN KEY (ProductCode) REFERENCES Product(ProductCode), CONSTRAINT FK_Inventory_Color FOREIGN KEY (ColorCode) REFERENCES Color(ColorCode), UNIQUE (ProductCode, ColorCode, Size) );
错误原因及解决方法
关键字冲突:
Size是Oracle的保留关键字,直接用作列名会触发无效标识符错误。
解决方式二选一:- 修改列名,比如改为
ProductSize,同时更新所有约束中引用该列的部分; - 给列名加上双引号,写成
"Size",后续查询或维护该列时也必须使用双引号(Oracle会区分大小写)。
- 修改列名,比如改为
关联表或列不存在:检查
Product表是否存在且包含ProductCode列,Color表是否存在且包含ColorCode列。若关联表未创建,或列名拼写错误(比如大小写不匹配,Oracle默认将未加引号的列名转为大写),也会触发该错误。约束列名拼写错误:核对所有CHECK约束、外键约束中的列名,确保和表定义的列名完全一致,避免拼写失误。
修正后的示例语句(修改列名版本)
CREATE TABLE Inventory ( InventoryNumber INT PRIMARY KEY, ProductCode VARCHAR(10), ColorCode VARCHAR(10), ProductSize VARCHAR(10) NOT NULL, Price DECIMAL(10,2) NOT NULL, QuantityOnHand INT NOT NULL, CONSTRAINT CHK_Inventory_Size CHECK (ProductSize IN ('S', 'M', 'L', 'XL', 'XXL')), CONSTRAINT CHK_Inventory_Price CHECK (Price <= 9999.99), CONSTRAINT CHK_Inventory_QuantityOnHand CHECK (QuantityOnHand >= 0), CONSTRAINT FK_Inventory_Product FOREIGN KEY (ProductCode) REFERENCES Product(ProductCode), CONSTRAINT FK_Inventory_Color FOREIGN KEY (ColorCode) REFERENCES Color(ColorCode), UNIQUE (ProductCode, ColorCode, ProductSize) );
内容的提问来源于stack exchange,提问作者Darshan
相关产品推荐
相关产品推荐

