2013-05-17 20 views
0

我有一個複製表:的Oracle SQL ORA-02291母密鑰未發現

CREATE TABLE d_clients_copy As SELECT * FROM d_clients; 

只有數據結構和值被複制,約束不。

所以我加入主鍵到新創建的數據庫:

ALTER TABLE d_clients_copy 
add CONSTRAINT client_number_pk 
    PRIMARY KEY (client_number); 

現在我在新創建的表的主鍵列。

我有一個事件表,我試圖從c_clients_copy表中引用client_number。

ALTER TABLE d_events_copy 
add CONSTRAINT client_number_fk 
    FOREIGN KEY (client_number) 
    REFERENCES d_clients_copy (client_number); 

和Oracle提供了以下錯誤:

ORA-02298: cannot validate ... - parent keys not found.

哪一個是父?我感到很困惑。

注意:每個表格都包含數據。

+1

中''的列client_number'表d_events_copy'包含''d_clients_copy'的client_number'列不存在這些值表。這就是爲什麼這個錯誤。 – Noel

+0

@Noel表'd_events_copy'是使用'SELECT * FROM d_clients'創建的,沒有where子句,所以我認爲有相同的數據。 – Parado

+0

我不知道表中有什麼數據。但是,錯誤肯定是由於子表中的數據不在父表中。讓OP檢查數據。 '從d_events_copy中選擇client_number,其中client_number不在(從d_clients_copy中選擇client_number)' – Noel

回答

2

當您複製這兩個表時,您可能在發出選擇的時間之間發生更改。

默認情況下,第二個選擇不會與第一個選擇同時選擇數據,因爲Oracle的默認查詢隔離級別是READ COMMITTED。

要改變這種行爲,你必須修改爲會議SERIALIZABLE查詢隔離級別:http://docs.oracle.com/cd/B28359_01/server.111/b28318/consist.htm#CNCPT1320