Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-00904::标识符无效_Sql_Oracle_Oracle10g_Ora 00904 - Fatal编程技术网

Sql ORA-00904::标识符无效

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)

我试图在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) ,
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
);