PLSQL命令插入到select中会给出唯一约束错误

时间:2012-09-28 15:12:32

标签: plsql

我是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”栏......

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

2 个答案:

答案 0 :(得分:0)

首先,我建议您查看表的唯一索引和主键,然后检查查询提取的记录数。我希望你只得到一个rec。如果很多 - 考虑触发器。可能有些人会覆盖你的16(例如错误的序列)。无论如何,请向我们提供带触发器的表格的ddl。

答案 1 :(得分: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的记录。

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