0

我有一个复制的表:

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: 无法验证... - 未找到父键。

哪个是家长?我感到很困惑。

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

4

1 回答 1

2

当您复制这两个表时,您可能在发出选择的时间之间发生了变化。

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

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

于 2013-05-17T10:18:21.780 回答