2010-12-15 7 views
2

Ich versuche, eine Tabelle in Oracle zu erstellen und den Fehler bekommen: ORA-00904: : invalid identifierORA-00904: ungültige Kennung

Hier ist mir Befehl. Ich kann wirklich kein Problem darin sehen. Bitte helfen Sie mir, den Fehler zu identifizieren. Vielen Dank.

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

Könnte es, dass Sie sein‘ Versuchen Sie, eine Spalte namens Date zu erstellen, die ein reserviertes Wort ist? Was passiert, wenn Sie einen anderen Namen verwenden oder Zitate um den Spaltennamen setzen? – Joe

+3

Das wird sicherlich ein anderes Problem verursachen. Aber zitieren Sie keine Anführungszeichen, benennen Sie sie um. Sobald Sie Anführungszeichen um ihn herum gesetzt haben, müssen Sie immer in Anführungszeichen zwischen Groß- und Kleinschreibung unterscheiden: Wählen Sie "Datum" aus dem Verkauf ... –

+2

Wie können Sie Einschränkungen und Spalten nacheinander aus Ihrer Anweisung entfernen, bis Sie herausgefunden haben, was die verursacht Error? –

Antwort

8

Wie bereits erwähnt, ändern "DATE", um etwas mehr beschreibend und nicht reserviert. auch scheint es TINYINT nicht in einer Tabelle funktioniert schaffen, so dass (1) bis Nummer ändern, sowie Tonys richtigen Vorschlag, den Namen Größe reduziert (< = 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

Das gleiche Problem hier. Ich habe versucht, Datum als Spaltennamen zu verwenden. Ich frage mich, warum Oracle so wählerisch ist, während MSSQL und MYSQL es akzeptieren, ohne sich zu beschweren? –

9

Die maximale Länge für einen Oracle-Bezeichner beträgt 30 Zeichen. Diese überschreiten, dass sind 32 Zeichen lang:

  • fk_Customer_has_Product_Customer
  • fk_Customer_has_Product_Product1

Siehe Schema Object Naming Rules