违反了不存在的Oracle数据库约束

时间:2012-03-06 20:50:38

标签: sql oracle unique-constraint

我被分配到一个有两个表的应用程序,我们称之为MY_TABLE_ONEMY_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 个答案:

答案 0 :(得分:13)

这是一个索引

select * from all_ind_columns where index_name = 'MY_TABLE_TWO_UK01';