2010-12-15 3 views
2

Je tente de créer une table dans Oracle et d'obtenir l'erreur: ORA-00904: : invalid identifierORA-00904:: identifiant invalide

Voici ma commande. Je ne peux vraiment pas y voir de problème. Aidez-moi s'il vous plaît à identifier l'erreur. Merci.

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

pourrait-il que vous » Vous essayez de créer une colonne nommée Date, qui est un mot réservé? Que se passe-t-il si vous utilisez un nom différent ou mettez des guillemets autour du nom de la colonne? – Joe

+3

Cela causera certainement un autre problème. Mais ne mettez pas de guillemets autour de lui, renommez-le. Une fois que vous mettez des guillemets autour de lui, vous êtes coincé dans des citations pour toujours: sélectionnez "Date" de la vente ... –

+2

Que diriez-vous de supprimer les contraintes et les colonnes de votre déclaration une à la fois jusqu'à ce que vous devinez lequel cause la Erreur? –

Répondre

8

Comme mentionné précédemment, le changement "DATE" à quelque chose de plus descriptif et non réservé. En outre, il semble TINYINT ne fonctionne pas dans une table créent donc changer cela NUMBER (1), ainsi que la suggestion correcte de Tony de réduire la taille du nom (< = 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

Même problème ici. J'ai essayé d'utiliser la date comme nom de colonne. Je me demande pourquoi Oracle est si pointilleux à ce sujet, alors que MSSQL et MYSql l'acceptent sans se plaindre? –

9

La longueur maximale d'un identifiant Oracle est de 30 caractères. Ceux-ci dépassent que de 32 caractères longs:

  • fk_Customer_has_Product_Customer
  • fk_Customer_has_Product_Product1

Voir Schema Object Naming Rules