【发布时间】:2013-08-12 16:51:35
【问题描述】:
我创建了一个名为ITEM的表
CREATE TABLE item
(Item_no NUMBER(4) CONSTRAINT item_item_no_pk PRIMARY KEY,
item_name VARCHAR2 (50) CONSTRAINT item_item_name_nn NOT NULL,
Category_code VARCHAR2 (3) CONSTRAINT item_category_code_nn NOT NULL,
Qty_in NUMBER (5) CONSTRAINT item_qty_in_ck CHECK (qty_in > 0),
Qty_out NUMBER (5) CONSTRAINT item_qty_out_ck CHECK (qty_out > 0),
Qty_bal NUMBER (5) CONSTRAINT item_qty_bal_ck CHECK (qty_bal >= 0),
Last_purchase_date DATE,
Last_sale_date DATE,
Cost_price NUMBER (5,2) CONSTRAINT ITEM_cost_price_ck CHECK (cost_price > 0),
Sales_price NUMBER (5,2) CONSTRAINT ITEM_sales_price_ck CHECK (sales_price > 0));
现在我正在尝试创建一个类别表
CREATE TABLE category
(Category_code VARCHAR2(3) NOT NULL,
CONSTRAINT category_Category_code_fk
FOREIGN KEY (Category_code) REFERENCES item (Category_code),
Category_name VARCHAR2(50) NOT NULL);
我收到了这个错误:
SQL 错误:ORA-00955:名称已被现有对象 00955 使用。00000 - “名称已被现有对象使用”
我不确定我错过了什么,因为我知道你可以拥有相同的列名......我一直在兜圈子。如果有人能指出我正确的方向,我将不胜感激。
【问题讨论】:
-
我不确定您遇到了什么错误,但是如果您尝试在第二个表中引用表 ITEM,那么您在第二个表定义中的何处指定该表?
-
我得到的错误是 SQL 错误:ORA-00955:名称已被现有对象 00955 使用。00000 -“名称已被现有对象使用”我引用了项目表,因为外键是分类表中的category_code
-
从项目中引用类别更有意义:
Category_code VARCHAR2 (3) CONSTRAINT item_category_code_nn NOT NULL references category( Category_code) -
category_code 是分类表中的外键。这就是我先创建项目表,然后引用项目表的原因。
-
不要混合约束和列声明。将约束放在最后(列之后)。
标签: sql oracle foreign-keys constraints