2017-01-03 48 views
1

我的应用程序读取正在批处理作业中处理的大文件,如果它具有代码“D”,它将删除帐户表中的行。 此帐户表与外部关键字FK_ACCOUNT_CONSUMER_ID的关系由CONSUMER_ID列链接的Consumer表。 删除操作的顺序是正确的,有时会导致完整性约束违规错误,并且作业失败。ORA-02292:违反完整性约束(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)违反 - 子记录 发现

+1

您需要向我们展示这两个表的DDL,或至少如何定义PK/FK约束。如果帐户具有引用消费者表上的PK的FK,则删除该子帐户(帐户)记录不应导致此错误;那么你是否也在后来删除了消费者(可能是一个拥有多个账户的消费者?),或者你是否有触发器做你不期望的事情,或者是级联约束也不是很正确? –

+2

检查FK约束'FK_ACCOUNT_CONSUMER_ID'的定义,它可能指向另一个表。 – wdosanjos

回答

0

您可能需要检查几件事情,

  1. 帐户表中可能有多个子行。
  2. 可能有其他表具有consumer_id外键。
相关问题