2015-10-17 108 views
0

我刚刚将一个新列manager_id添加到unique constraint的现有表。我用这个语法来填充manager_id柱:。它是如何工作的?

update employees 
set manager_id = &id 
where job_id = '& job'; 

当我运行这段代码我得到一个错误信息:

ORA-00001:唯一约束(HR.MAN_UK)违反

此栏为空,那么我怎么可能违反约束?

+0

有多少行符合条件'where job_id =&id'? –

+0

第一个我试过,只有一行,但有一些将返回多行 –

回答

0

如果employees有多个与job_id = '& id'匹配的行,则可以违反约束条件。也就是说,您在语句中将多行设置为相同的ID。

冲突与现有值不符。它们位于您在update中设置的一组值中。

+0

U是正确的,我刚刚检查,我发现job_id项有多个输出。 –

0

“第一个我想,只有一行”

这似乎是不太可能的,甲骨文当我们试图填充第二个相同的约束列仅抛出一个违反唯一约束。因此,如果在运行更新之前MANAGER_ID列为空,那么JOB_ID必须打到多行。

“也有一些将返回多行”

如果业务逻辑是,经理可以管理一个以上的人 - 在让我们面对它那是常态 - 那么就应该有不是管理员ID的唯一限制。所以放下它。

你应该拥有的是一个外键,要么引用EMPLOYEES主(管理员必须是员工),要么是管理者表(管理者必须是管理者)。