【问题标题】:SQL Error: ORA-02267 column type incompatible with referenced column typeSQL 错误:ORA-02267 列类型与引用的列类型不兼容
【发布时间】:2020-04-24 21:37:05
【问题描述】:

oracle 12c 的源代码

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)

【问题讨论】:

  • 究竟是什么错误?你正在创建很多表,我们应该只看错误发生的地方
  • 看起来错误是在 CREATE TABLE CUSTORDER 期间。它在尚不存在的表上创建 SupplierID FK 约束。
  • ORA-02267: column type incompatible with referenced column type 的副本和许多更老的更通用的消息。 (正如我们所料。)。在考虑发布之前,请阅读您的参考和手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql oracle foreign-keys oracle12c create-table


【解决方案1】:

您需要将每个外键的引用列的数据类型和长度与其在源表中引用的列对齐。

在您的代码中,SUPPLIER(SupplierID) 被声明为Char(20)。另一方面,引用列INVOICE(SupplierID)Char(10)CUSTORDER(SupplierID)VarChar(20)。如果你把这两列设为Char(20),你的代码就可以工作了。

另外:被引用的表必须在创建引用表时存在 - 您的代码创建 CUSTORDER 之前 SUPPLIER。但是,我认为这是写问题时的拼写错误,否则您会收到不同的错误:ORA-00942: table or view does not exist

在每个create table 语句的末尾也缺少右括号:我也会考虑这些错别字。

Demo on DB Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2013-10-30
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多