找不到Oracle sql ORA-02291父键

时间:2013-05-17 09:26:48

标签: sql oracle parent

我有一张复制的表格:

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:无法验证... - 找不到父密钥。

哪一个是父母?我很困惑。

注意:每个表都包含数据。

1 个答案:

答案 0 :(得分:2)

复制两个表时,可能会在发出选择之间发生更改。

默认情况下,第二个选择将不会选择与第一个选择同时的数据,因为Oracle的默认查询隔离级别是READ COMMITTED。

要更改此行为,您必须将会话的查询隔离级别修改为SERIALIZABLE:http://docs.oracle.com/cd/B28359_01/server.111/b28318/consist.htm#CNCPT1320