【发布时间】:2021-12-05 03:59:45
【问题描述】:
我的 SQL 代码有问题。我正在创建两个表,一个名为 Orders_For,另一个名为 Result。结果应该从 Orders_For 中提取“日期”和“时间”作为外键。这些来自 Orders_for 的外键也是 Result 的主键。有人可以帮我指出正确的方向吗?
我收到错误:
ORA-00955:名称已被现有对象使用
00955. 00000 - “名称已被现有对象使用”
这是给出这个和结果的代码:
代码(在图片中更容易理解):
--ORDERS_FOR(OrdersForDate, OrdersForTime, PhysicianID, TestNumber, TestName, PatientID)
CREATE TABLE ORDERS_FOR(
OrdersForDate VARCHAR(50),
OrdersForTime VARCHAR(50),
O_PhysicianID CHAR(5),
O_TestNumber CHAR(5),
O_TestName VARCHAR(45),
O_PatientID CHAR(10),
CONSTRAINT Orders_ForPK_ok PRIMARY KEY(OrdersForDate,OrdersForTime,O_PhysicianID,O_TestNumber,O_TestName,O_PatientID),
CONSTRAINT Orders_ForFK FOREIGN KEY(O_PhysicianID)
REFERENCES PHYSICIAN(PhysicianID),
CONSTRAINT Orders_ForFK_tol FOREIGN KEY(O_TestNumber,O_TestName)
REFERENCES TEST(TestNumber,TestName),
--CONSTRAINT Orders_ForFK FOREIGN KEY(O_TestName)
-- REFERENCES TEST(TestName),
CONSTRAINT Orders_ForFK_toll FOREIGN KEY(O_PatientID)
REFERENCES PATIENT(PatientID)
);
--RESULT(Date, Time, Result)
CREATE TABLE RESULT(
ResultDate VARCHAR(50),
ResultTime VARCHAR(50),
ResultGiven VARCHAR(100),
CONSTRAINT ResultPK_o PRIMARY KEY(ResultDate,ResultTime),
CONSTRAINT ResultFK_tol FOREIGN KEY(ResultDate,ResultTime)
REFERENCES ORDERS_FOR(OrdersForDate,OrdersForTime)
--CONSTRAINT ResultFK_n2 FOREIGN KEY(ResultTime)
--REFERENCES ORDERS_FOR(OrdersForTime)
);
这是脚本输出:
Table ORDERS_FOR created.
从第 86 行开始的错误命令 -
创建表结果(
结果日期 VARCHAR(50),
结果时间 VARCHAR(50),
结果给定 VARCHAR(100),
CONSTRAINT ResultPK_o PRIMARY KEY(ResultDate,ResultTime),
CONSTRAINT ResultFK_tol FOREIGN KEY(ResultDate,ResultTime)
参考 ORDERS_FOR(OrdersForDate,OrdersForTime)
--CONSTRAINT ResultFK_n2 FOREIGN KEY(ResultTime)
--REFERENCES ORDERS_FOR(OrdersForTime)
)错误报告 -
ORA-02270: 此列列表没有匹配的唯一键或主键 02270. 00000 - “此列列表没有匹配的唯一键或主键”
*原因:CREATE/ALTER TABLE 语句中的 REFERENCES 子句给出了一个列列表,在被引用的表中没有匹配的唯一键或主键约束。
*操作:使用 ALL_CONS_COLUMNS 目录视图查找正确的列名
这些也附在图片中。
【问题讨论】:
-
另外,我没有包含“TEST”表,因为我认为它与这个问题无关。但如果它有帮助,我会包括它。
-
欢迎来到 StackOverflow:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
{ }) 在编辑器工具栏上很好地格式化和语法突出显示它! -
错误描述中有什么不清楚的地方?以及为什么在稍后显示另一个错误时发布 ORA-00955?
-
附带说明:您的数据类型不合适。为什么要拆分日期和时间并为此使用字符串?我建议改为
order_datetime DATE。 (DATE是 Oracle 对日期时间的不恰当名称。)顺便说一下,在 Oracle 中,您不应使用VARCHAR,而应使用VARCHAR2。并且永远不要使用CHAR,而是始终使用VARCHAR2。使用CHAR可能非常困难并且容易出错,因为添加了空白,您在编写查询时必须注意这一点。 Oracle 自己建议不要使用它。
标签: sql database oracle key schema