【发布时间】:2012-03-06 20:50:37
【问题描述】:
我被指派处理一个有两个表的应用程序,我们称它们为MY_TABLE_ONE 和MY_TABLE_TWO。当用户在表单中输入数据时,数据会输入到MY_TABLE_ONE。完成后,会触发一个数据库包,它本质上做了以下工作:
DELETE FROM MY_TABLE_TWO;
INSERT INTO MY_TABLE_TWO
mto.COLUMN_ONE,
moto.COLUMN_TWO,
mott.COLUMN_THREE
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID;
由于某种原因,此包在插入时开始失败,并显示以下消息:
ORA-00001: unique constraint
(MY_SCHEMA.MY_TABLE_TWO_UK01) violated
ORA-06512: at "MY_SCHEMA.MY_PACKAGE", line 2
ORA-06512: at line 1
查找MY_TABLE_TWO 上的约束,没有MY_TABLE_TWO_UK01 约束。然而,有一个 MY_TABLE_TWO_UK 约束要求插入的 3 个列是唯一的。但是,如果我运行以下查询:
SELECT mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE, COUNT(*) AS COUNTER
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID
GROUP BY mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE
ORDER BY COUNTER DESC;
那么所有的计数都是 1。所以看起来没有违反该约束。
有人知道发生了什么吗?我不确定约束名称的 01 来自哪里。而且我找不到违反约束的地方。
【问题讨论】:
-
您的支票不会告诉您任何信息,因为由于约束,没有插入重复数据,因此计数显然是 1
-
@SamHolder 但我是从
MY_TABLE_ONE拉出来的。我正在寻找在您尝试将它们插入MY_TABLE_TWO时引发错误的重复项。 2 或更多的计数将显示违反行的约束。 -
如果 Oracle 愿意在错误消息中说“违反唯一索引约束”之类的话。
标签: sql oracle unique-constraint