ORA-02292: 违反完整性约束 (FK_ACCOUNT_CONSUMER_ID) - 找到子记录

Posted

技术标签:

【中文标题】ORA-02292: 违反完整性约束 (FK_ACCOUNT_CONSUMER_ID) - 找到子记录【英文标题】:ORA-02292: integrity constraint violated (FK_ACCOUNT_CONSUMER_ID) - child record found 【发布时间】:2017-05-17 23:00:29 【问题描述】:

我的应用程序读取了一个正在批处理作业中处理的大文件,如果它有代码“D”,它会删除帐户表中的行。 此帐户表与由 CONSUMER_ID 列链接的 Consumer 表具有外键 FK_ACCOUNT_CONSUMER_ID 关系。 删除操作的顺序正确,有时这会导致违反完整性约束错误并且作业失败。

非常感谢任何帮助。

BEGIN
    --If action code is D, delete the records
    IF (temp_account_id is not null AND temp_action_code = 'D') THEN
        delete account_tokens at
        where at.account_id = temp_account_id;

        delete account a
        where a.account_id = temp_account_id;
    END IF;

END;

com.batch.framework.BatchJobException:处理时出现 SQLException 数据馈送批次 = 343919。消息 = 无法创建 IDBResultSet 对象:java.sql.SQLIntegrityConstraintViolationException:ORA-02292: 违反完整性约束 (FK_ACCOUNT_CONSUMER_ID) - 子记录 找到了

【问题讨论】:

您需要向我们展示两个表的 DDL,或者至少向我们展示如何定义 PK/FK 约束。如果 account 有一个 FK 引用 consumer 表上的 PK,则删除该子(account)记录不应导致此错误;那么您以后是否还要删除消费者(可能是具有多个帐户的消费者?),或者您是否有触发器做一些您不期望的事情,或者级联约束也不太正确? 检查 FK 约束 FK_ACCOUNT_CONSUMER_ID 的定义,它可能指向另一个表。 【参考方案1】:

您可能需要检查几件事,

    帐户表中可能有多个子行。 可能还有其他具有 consumer_id 外键的表。

【讨论】:

以上是关于ORA-02292: 违反完整性约束 (FK_ACCOUNT_CONSUMER_ID) - 找到子记录的主要内容,如果未能解决你的问题,请参考以下文章

ORA-02292违反完整约束和ORA-02297无法禁用约束条件 cascade禁用主键

ORA-02292: 违反完整性约束 - 在 ORACLE SQL Developer 中创建过程时发现子记录?

ora-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录

Hibernate ORA-02292: 违反完整性约束 (ROOT.SYS_C007062) - 找到子记录

ORA-02292: 违反完整性约束 (FK_ACCOUNT_CONSUMER_ID) - 找到子记录

Oracle的ORA-02292报错:违反完整性约束,已找到子记录