1

我是 plsql 的新手,这个命令搞砸了一些事情:

insert into coffee_tea_join_table 
select coffee_id, 16 
from coffee_tea_join_table 
where tea_id = 6;

这会返回一个

“原因:java.sql.SQLException:ORA-00001:违反唯一约束”错误。

coffee_tea_join_table 只有两列,coffee_id 和一个 tea_id。

看起来该语句想要再次插入来自它选择的同一个表的内容。我猜它会查找对应tea_id = 6 的coffee_id 表,但为什么那里有'16' 静态值?没有“16”列...

如果它找到了一个tea_id = 6 的coffee_id,那么为什么将它再次插入同一个表中是有意义的呢?也许这就是违反约束的原因?

4

2 回答 2

0

首先,在检查查询提取了多少记录之后,我建议查看表的唯一索引和主键。我希望你只得到 1 条记录。如果很多 - 考虑触发器。可能其中一些会覆盖您的 16(例如,从错误的顺序)。无论如何,请向我们提供带有触发器的表的 ddl。

于 2012-09-28T18:44:35.327 回答
0

如果我们首先假设表 coffee_tea_join_table 有两列 coffee_id 和 tea_id,并且该表对这两个表有一个组合唯一约束。SQL 正在创建一条tea_id = 16 和 cofee_id 的新记录,与 tea_id = 6 的记录相同。然后,​​由于您已经有一条 tea_id = 16 和 cofee_id = 相同的 cofee_id 值的记录,导致此错误作为 tea_id = 6 的记录。

如果这对您没有帮助,那么您需要挖掘表定义,包括表的唯一约束。

于 2012-09-29T15:05:45.413 回答