Sql ORA-00904::标识符无效
我试图在Oracle中创建一个表,但得到了错误:Sql ORA-00904::标识符无效,sql,oracle,oracle10g,ora-00904,Sql,Oracle,Oracle10g,Ora 00904,我试图在Oracle中创建一个表,但得到了错误:ORA-00904::无效标识符 这是我的命令。我真的看不出有什么问题。请帮我识别错误。谢谢 CREATE TABLE Sale ( CustomerId INT NOT NULL , BarCode INT NOT NULL , SalesId INT NOT NULL , Date DATE NULL , CheckOut TINYINT(1) NULL , PRIMARY KEY (CustomerId, BarCode, SalesId)
ORA-00904::无效标识符
这是我的命令。我真的看不出有什么问题。请帮我识别错误。谢谢
CREATE TABLE Sale (
CustomerId INT NOT NULL ,
BarCode INT NOT NULL ,
SalesId INT NOT NULL ,
Date DATE NULL ,
CheckOut TINYINT(1) NULL ,
PRIMARY KEY (CustomerId, BarCode, SalesId) ,
CONSTRAINT fk_Customer_has_Product_Customer
FOREIGN KEY (CustomerId )
REFERENCES Customer (CustomerId )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Customer_has_Product_Product1
FOREIGN KEY (BarCode )
REFERENCES Product (BarCode )
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Oracle标识符的最大长度为30个字符。这些长度超过32个字符:
- fk_客户_拥有产品_客户
- fk_客户_拥有产品_产品1
请参见前面提到的,将“日期”更改为更具描述性且不保留的内容。此外,它似乎不适用于表的创建,所以将其更改为数字(1),以及Tony关于减小名称大小的正确建议(可能是您试图创建一个名为Date的列,这是一个保留字吗?如果您使用不同的名称或在列名周围加引号,会发生什么情况?这肯定会导致另一个问题。但不要在列名周围加引号,请重命名它。一旦在列名周围加引号,您将无法区分大小写引用它。)混响:选择“日期”从sale中删除约束和列,一次删除一个,直到找出错误的原因为止?@Dave-哦,是的,老式的调试,有一个想法!除了这些问题,请注意Oracle会将您的名称转换为大写。因此SalesID将是SalesID。如果您希望SalesID是实际名称,您需要将其双重引用为“SalesId”。正如Tony提到的,每个地方都有。这是一个痛苦的问题,这就是为什么我见过的大多数Oracle命名使用下划线约定,其名称如SALES_ID。这里也有同样的问题。我试着使用date作为列名。我想知道为什么Oracle对此如此挑剔,而MSSQL和MYSql毫无怨言地接受它?
CREATE TABLE Sale
(
CustomerId INT NOT NULL ,
BarCode INT NOT NULL ,
SalesId INT NOT NULL ,
SaleDate DATE NULL , --DATE is reserved, changed to SaleDate
CheckOut number(1) NULL , --tinyint(1) did not work so changed to number(1)
PRIMARY KEY( CustomerId, BarCode, SalesId ) ,
CONSTRAINT fk_SaleCustCusID FOREIGN KEY( CustomerId ) REFERENCES Customer( CustomerId ) ON
DELETE NO ACTION ON
UPDATE NO ACTION,
CONSTRAINT fk_SaleCustBarCode FOREIGN KEY( BarCode ) REFERENCES Product( BarCode ) ON
DELETE NO ACTION ON
UPDATE NO ACTION
);