Sie sind auf Seite 1von 4

®

Oracle Retail Invoice Matching


12.0
Defect Report
Bug Number: 7525009
Severity: 2
Functional Areas: Batch
Cross-Product Impact: NA
Product Other Functional Area Bug Number

Modules and Revision Numbers:


Module Version Control System Revision Number
BatchPurge.java CVS

Description
Batch purge process fails against FK violation.

Instructions to Re-create
Run the Batch Purge process.
The process aborts with errors similar to the following:
ORA-02292: integrity constraint (RMS120.IOH_DRC_FK) violated – child record found

Resolution
BatchPurge.java
Added missing calls to delete child records for other tables with foreign key relationships to IM_DOC_HEAD.

Scripts to Run
N/A

Old Code
BatchPurge.java

protected void purgeImDocHeadTable(Statement stmt, String[] userWhere) throws ReIMException {
purgeTable(stmt, false, "IM_EDI_RJT_DOC_DTL_AUDIT", userWhere[0]);
purgeTable(stmt, false, "IM_EDIRJT_DOCDTL_ALW_AUDIT", userWhere[0]);
purgeTable(stmt, false, "IM_EDI_RJT_DOC_NM_AUDIT", userWhere[0]);
purgeTable(stmt, true, "IM_EDI_RJT_DOC_HEAD_AUDIT A", userWhere[1]);
purgeImDocHeadDescendants(stmt, userWhere[2]);

Page 1 of 4
purgeImDocHeadDescendants(stmt, userWhere[3]);

purgeTable(stmt, true, "IM_EDI_RJT_DOC_DTL_AUDIT", userWhere[4]);


purgeTable(stmt, false, "IM_EDIRJT_DOCDTL_ALW_AUDIT", userWhere[4]);
purgeTable(stmt, false, "IM_EDI_RJT_DOC_NM_AUDIT", userWhere[4]);
purgeTable(stmt, false, "IM_EDI_RJT_DOC_HEAD_AUDIT A", userWhere[5]);
purgeImDocHeadDescendants(stmt, userWhere[6]);

purgeTable(stmt, false, "IM_DOC_HEAD", userWhere[2]);


protected void purgeImDocHeadDescendants(Statement stmt, String userWhere) throws


ReIMException {

purgeTable(
stmt,
false,
"IM_INVOICE_DETAIL_ALLOWANCE",
"DOC_ID IN (SELECT DOC_ID from IM_INVOICE_DETAIL WHERE DOC_ID IN (SELECT DOC_ID
from IM_DOC_HEAD WHERE "
+ userWhere + "))");

purgeTable(
stmt,
false,
"IM_QTY_DISCREPANCY_ROLE",
"QTY_DISCREPANCY_ID IN (SELECT QTY_DISCREPANCY_ID from IM_QTY_DISCREPANCY WHERE
DOC_ID IN (SELECT DOC_ID from IM_DOC_HEAD WHERE "
+ userWhere + "))");

purgeTable(stmt, false, "IM_FINANCIALS_STAGE",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");

purgeTable(stmt, false, "IM_COST_DISCREPANCY",


"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");

purgeTable(
stmt,
false,
"IM_QTY_DISCREPANCY",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE "
+ userWhere
+ ") AND NOT EXISTS (SELECT 1 FROM IM_QTY_DISCREPANCY_ROLE B WHERE
B.QTY_DISCREPANCY_ID=IM_QTY_DISCREPANCY.QTY_DISCREPANCY_ID) AND NOT EXISTS (SELECT 1 FROM
IM_QTY_DISCREPANCY_RECEIPT B WHERE B.QTY_DISCREPANCY_ID=IM_QTY_DISCREPANCY.QTY_DISCREPANCY_ID)");
purgeTable(stmt, false, "IM_DOC_DETAIL_REASON_CODES",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_FINANCIALS_STAGE_ERROR",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_DOC_NON_MERCH",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_COMPLEX_DEAL_DETAIL",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_FIXED_DEAL_DETAIL",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_CN_DETAIL_MATCH_HIS",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_CN_SUMMARY_MATCH_HIS",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
}

New Code
BatchPurge.java

Page 2 of 4

protected void purgeImDocHeadTable(Statement stmt, String[] userWhere) throws ReIMException {
purgeTable(stmt, false, "IM_EDI_RJT_DOC_DTL_AUDIT", userWhere[0]);
purgeTable(stmt, false, "IM_EDIRJT_DOCDTL_ALW_AUDIT", userWhere[0]);
purgeTable(stmt, false, "IM_EDI_RJT_DOC_NM_AUDIT", userWhere[0]);
purgeTable(stmt, true, "IM_EDI_RJT_DOC_HEAD_AUDIT A", userWhere[1]);
purgeImDocHeadDescendants(stmt, userWhere[2]);

purgeImDocHeadDescendants(stmt, userWhere[3]);

purgeTable(stmt, true, "IM_EDI_RJT_DOC_DTL_AUDIT", userWhere[4]);


purgeTable(stmt, false, "IM_EDIRJT_DOCDTL_ALW_AUDIT", userWhere[4]);
purgeTable(stmt, false, "IM_EDI_RJT_DOC_NM_AUDIT", userWhere[4]);
purgeTable(stmt, false, "IM_EDI_RJT_DOC_HEAD_AUDIT A", userWhere[5]);
purgeImDocHeadDescendants(stmt, userWhere[6]);

purgeTable(stmt, false, "IM_DOC_HEAD", userWhere[2]


+ " AND NOT EXISTS (SELECT 1 FROM IM_DOC_HEAD B WHERE B.REF_DOC=IM_DOC_HEAD.DOC_ID)");

protected void purgeImDocHeadDescendants(Statement stmt, String userWhere) throws


ReIMException {

purgeTable(
stmt,
false,
"IM_INVOICE_DETAIL_ALLOWANCE",
"DOC_ID IN (SELECT DOC_ID from IM_INVOICE_DETAIL WHERE DOC_ID IN (SELECT DOC_ID
from IM_DOC_HEAD WHERE "
+ userWhere + "))");
purgeTable(
stmt,
false,
"IM_QTY_DISCREPANCY_CNR",
"QTY_DISCREPANCY_ID IN (SELECT QTY_DISCREPANCY_ID from IM_QTY_DISCREPANCY WHERE
DOC_ID IN (SELECT DOC_ID from IM_DOC_HEAD WHERE "
+ userWhere + "))");
purgeTable(
stmt,
false,
"IM_QTY_DISCREPANCY_ROLE",
"QTY_DISCREPANCY_ID IN (SELECT QTY_DISCREPANCY_ID from IM_QTY_DISCREPANCY WHERE
DOC_ID IN (SELECT DOC_ID from IM_DOC_HEAD WHERE "
+ userWhere + "))");

purgeTable(stmt, false, "IM_FINANCIALS_STAGE",


"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_COST_DISCREPANCY_CNR",
"(COST_DISCREPANCY_ID) IN (SELECT COST_DISCREPANCY_ID from IM_COST_DISCREPANCY " +
"WHERE (DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + "))");
purgeTable(stmt, false, "IM_COST_DISCREPANCY",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");


purgeTable(
stmt,
false,
"IM_QTY_DISCREPANCY",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ") "
+ "AND NOT EXISTS (SELECT 1 FROM IM_QTY_DISCREPANCY_ROLE B "
+ "WHERE B.QTY_DISCREPANCY_ID=IM_QTY_DISCREPANCY.QTY_DISCREPANCY_ID) "
+ "AND NOT EXISTS (SELECT 1 FROM IM_QTY_DISCREPANCY_RECEIPT B "
+ "WHERE B.QTY_DISCREPANCY_ID=IM_QTY_DISCREPANCY.QTY_DISCREPANCY_ID)"
+ "AND NOT EXISTS (SELECT 1 FROM IM_QTY_DISCREPANCY_CNR B "
+ "WHERE B.QTY_DISCREPANCY_ID=IM_QTY_DISCREPANCY.QTY_DISCREPANCY_ID)");
purgeTable(stmt, false, "IM_FINANCIALS_STAGE_ERROR",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_DOC_NON_MERCH",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");

Page 3 of 4
purgeTable(stmt, false, "IM_COMPLEX_DEAL_DETAIL",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_FIXED_DEAL_DETAIL",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_CN_DETAIL_MATCH_HIS",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_CN_SUMMARY_MATCH_HIS",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
purgeTable(stmt, false, "IM_DOC_DETAIL_REASON_CODES",
"(DOC_ID) IN (SELECT DOC_ID from IM_DOC_HEAD WHERE " + userWhere + ")");
}

Page 4 of 4

Das könnte Ihnen auch gefallen