2010-12-15 54 views
2

我想在Oracle中创建一个表,并得到错误:ORA-00904: : invalid identifierORA-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); 
+3

的建议,会不会是你”重新尝试创建一个名为Date的列,这是一个保留字?如果您使用不同的名称或在列名称周围加引号会发生什么? – Joe 2010-12-15 17:07:36

+3

这肯定会导致另一个问题。但不要在引号附近加上引号,重命名它。一旦你把引号放在它的周围,你就会被永远以大小写的引用引用:从销售中选择“Date”... – 2010-12-15 17:15:07

+2

如何从你的语句中逐个删除约束和列,直到找出哪一个引起了错误? – 2010-12-15 18:34:08

回答

8

正如前面提到的,改变 “DATE” 为更具说明性的,而不是保留。此外,它似乎TINYINT在表中不起作用创作出如此更改为NUMBER(1),以及托尼的正确降低名义尺寸(< = 30个CHRS)

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 
); 
+0

这里同样的问题。我试着使用日期作为列名。我想知道为什么Oracle对此非常挑剔,而MSSQL和MYSql无怨无悔地接受它? – 2012-08-08 21:24:31

9

Oracle标识符的最大长度为30个字符。这些超过,是32个字符长:

  • fk_Customer_has_Product_Customer
  • fk_Customer_has_Product_Product1

Schema Object Naming Rules