SQL Ошибка: тип столбца ORA-02267 несовместим с указанным типом столбца - PullRequest
0 голосов
/ 25 апреля 2020

Исходный код для oracle 12 c

CREATE TABLE CUSTOMER (
CustomerID      Char(20)    NOT NULL,
CustomerFirstName   Char(20) NOT NULL,
CustomerLastName    Char(25) NOT NULL,
CustomerAddress Char(45) NOT NULL,
CustomerEmail       Char(100) NOT NULL,
CONSTRAINT      Customer_PK Primary Key(CustomerID)

CREATE TABLE EMPLOYEE ( 
EmployeeID      VarChar(10) NOT NULL, 
EmployeeFName   VarChar(20)     NOT NULL, 
EmployeeRole        VarChar(30)     NOT NULL, CONSTRAINT        
Employee_PK Primary Key(EmployeeID) 

CREATE TABLE PRODUCT ( 
ProductID       VarChar(10) NOT NULL, 
ProductName     VarChar(20)     NOT NULL, 
ProductType     VarChar(20)     NOT NULL, 
ProductPrice        Number(8,2) NOT NULL, 
CONSTRAINT      Product_PK Primary Key(ProductID) 

CREATE TABLE CUSTORDER ( 
CustOrderID         VarChar(10) NOT NULL, 
CustOrderDate       Date    NOT NULL, 
CustShippingStatus      VarChar(20)     NOT NULL,
SupplierID      VarChar(20)     NOT NULL, 
CONSTRAINT      CustOrder_PK Primary Key (CustOrderID),
CONSTRAINT          CustOrder_FK FOREIGN KEY(SupplierID)
REFERENCES SUPPLIER(SupplierID) 

CREATE TABLE SUPPLIER ( SupplierID      Char(10)    NOT NULL, 
SupplierName        Char(20)    NOT NULL, 
SupplierAddress Char(45)    NOT NULL,
CONSTRAINT      Supplier_PK Primary Key (SupplierID)

CREATE TABLE INVOICE (
InvoiceID       Char(20)    NOT NULL,
TotalItems      Int         NOT NULL,
TotalCost       Number(8,2) NOT NULL,
SalesDate       Date        NOT NULL,
PaymentType     VarChar(10) NOT NULL,
ProductID       VarChar(10) NOT NULL,
EmployeeID      VarChar(10) NOT NULL,
CustomerID      Char(20)    NOT NULL,
SupplierID      Char(10)    NOT NULL, 
CONSTRAINT      Invoice_PK Primary Key(InvoiceID),
CONSTRAINT      Invoice_Product_FK Foreign Key(ProductID)
REFERENCES  PRODUCT(ProductID),
CONSTRAINT      Invoice_Employee_FK Foreign Key(EmployeeID)
REFERENCES  EMPLOYEE(EmployeeID),
CONSTRAINT      Invoice_Customer_FK Foreign Key(CustomerID)
REFERENCES  CUSTOMER(CustomerID),
CONSTRAINT      Invoice_Supplier_FK Foreign Key(SupplierID)
REFERENCES  SUPPLIER(SupplierID)

1 Ответ

1 голос
/ 25 апреля 2020

Вам необходимо выровнять тип данных и длину столбца ссылки каждого внешнего ключа со столбцом, на который он ссылается в исходной таблице.

В вашем коде SUPPLIER(SupplierID) объявлено как Char(20). С другой стороны, ссылка на столбец INVOICE(SupplierID) равна Char(10), а CUSTORDER(SupplierID) равна VarChar(20). Если вы сделаете эти два столбца Char(20), ваш код просто работает.

В стороне: ссылочная таблица должна существовать в момент создания ссылочной таблицы - ваш код createst CUSTORDER до SUPPLIER. Однако я предполагаю, что это опечатка при написании вопроса, в противном случае вы получите другую ошибку: ORA-00942: table or view does not exist.

У вас также отсутствуют пропущенные правые скобки в конце каждого и каждого оператора create table: I будет также учитывать эти опечатки.

Демонстрация на DB Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...