2010-12-15 4 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

Может быть, что вы» re пытается создать столбец с именем Date, который является зарезервированным словом? Что произойдет, если вы используете другое имя или поместите кавычки вокруг имени столбца? – Joe 2010-12-15 17:07:36

+3

Это, безусловно, вызовет еще одну проблему. Но не кладите туда кавычки, переименуйте его. После того, как вы разместите кавычки вокруг него, вы застряли с ссылкой на него в кавычках case-sensitively forever: выберите «Дата» из продажи ... – 2010-12-15 17:15:07

ответ

8

Как уже упоминалось ранее, изменение "DATE" на что-то более описательный и не защищены. Кроме того, он, кажется, TINYINT не работает в таблице создают так изменить, что NUMBER (1), а также правильное предложение Тони уменьшения размера имя (< = 30 ХР)

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 
); 
9

Максимальная длина идентификатора Oracle составляет 30 символов. Они превышают, что 32 символов длиной:

  • fk_Customer_has_Product_Customer
  • fk_Customer_has_Product_Product1

Schema Object Naming Rules См

Смежные вопросы