2015-10-17 118 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主(管理員必須是員工),要麼是管理者表(管理者必須是管理者)。

相關問題