The following lines contain the word 'select', 'insert', 'update' or 'delete':
| delete mode. Move the call to 'delete_rows'.
|
+===========================================================================*/
PROCEDURE merge (
req_id NUMBER,
set_num NUMBER,
process_mode VARCHAR2
) IS
BEGIN
arp_message.set_line( 'ARP_CMERGE_ARCPF.MERGE()+' );
| delete mode. Move the call to 'delete_rows'.
| Jianying Huang 09-APR-00 Bug 1725662: Modified 'ar_ch' to use index.
|
+===========================================================================*/
PROCEDURE ar_ch (
req_id NUMBER,
set_num NUMBER,
process_mode VARCHAR2
) IS
CURSOR c1 is
SELECT CREDIT_HISTORY_ID
FROM AR_CREDIT_HISTORIES yt, ra_customer_merges m
WHERE yt.customer_id = m.duplicate_id
AND yt.site_use_id = m.duplicate_site_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y'
FOR UPDATE NOWAIT;
SELECT CREDIT_HISTORY_ID
FROM AR_CREDIT_HISTORIES yt, ra_customer_merges m
WHERE yt.customer_id = m.duplicate_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y'
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.customer_id
AND acct.status <> 'D' )
FOR UPDATE NOWAIT;
DELETE FROM AR_CREDIT_HISTORIES yt
WHERE (customer_id, site_use_id) IN (
SELECT m.duplicate_id, m.duplicate_site_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y');
arp_message.set_name( 'AR', 'AR_ROWS_DELETED' );
DELETE FROM AR_CREDIT_HISTORIES yt
WHERE customer_id IN (
SELECT m.duplicate_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y' )
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.customer_id
AND acct.status <> 'D' );
arp_message.set_name( 'AR', 'AR_ROWS_DELETED' );
| products, we need to mark deleted rows here
| first and physically delete them after merging one
| set in 'delete_rows'.
|
+===========================================================================*/
PROCEDURE ar_cp (
req_id NUMBER,
set_num NUMBER,
process_mode VARCHAR2
) IS
--cursor c1 and c2 work in inactive mode.
CURSOR c1 is
SELECT cust_account_profile_id
FROM hz_customer_profiles, ra_customer_merges m
WHERE site_use_id = m.duplicate_site_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
FOR UPDATE NOWAIT;
SELECT cust_account_profile_id
FROM hz_customer_profiles yt, ra_customer_merges m
WHERE cust_account_id = m.duplicate_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N'
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'active accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status = 'A')
FOR UPDATE NOWAIT;
SELECT cust_account_profile_id
FROM hz_customer_profiles yt, ra_customer_merges m
WHERE cust_account_id = m.duplicate_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y'
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status <> 'D' )
FOR UPDATE NOWAIT;
UPDATE hz_customer_profiles yt
SET status = 'I',
last_update_date = sysdate,
last_updated_by = arp_standard.profile.user_id,
last_update_login = arp_standard.profile.last_update_login,
request_id = req_id,
program_application_id = arp_standard.profile.program_application_id,
program_id = arp_standard.profile.program_id,
program_update_date = sysdate
WHERE site_use_id IN (
SELECT m.duplicate_site_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N' ) ;
arp_message.set_name( 'AR', 'AR_ROWS_UPDATED' );
UPDATE hz_customer_profiles yt
SET status = 'I',
last_update_date = sysdate,
last_updated_by = arp_standard.profile.user_id,
last_update_login = arp_standard.profile.last_update_login,
request_id = req_id,
program_application_id = arp_standard.profile.program_application_id,
program_id = arp_standard.profile.program_id,
program_update_date = sysdate
WHERE cust_account_id IN (
SELECT m.duplicate_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N' )
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'active accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status = 'A');
arp_message.set_name( 'AR', 'AR_ROWS_UPDATED' );
/*************** 'delete' mode ***************/
--Bug 1535542: Mark the rows need to be deleted by setting status to 'D'.
--Physically delete them after merge.
--site level 'delete'
arp_message.set_name( 'AR', 'AR_UPDATING_TABLE' );
UPDATE hz_customer_profiles
SET status = 'D'
WHERE site_use_id IN (
SELECT m.duplicate_site_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y' ) ;
arp_message.set_name( 'AR', 'AR_ROWS_UPDATED' );
UPDATE hz_customer_profiles yt
SET status = 'D'
WHERE cust_account_id IN (
SELECT m.duplicate_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y' )
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status <> 'D' );
arp_message.set_name( 'AR', 'AR_ROWS_UPDATED' );
| products, we need to move the delete part to
| 'delete rows' in which we do physically delete after
| merging one set.
|
+===========================================================================*/
PROCEDURE ar_cpa (
req_id NUMBER,
set_num NUMBER,
process_mode VARCHAR2
) IS
--cursor c1 and c2 work in inactive mode.
CURSOR c1 is
SELECT CUST_ACCT_PROFILE_AMT_ID
FROM HZ_CUST_PROFILE_AMTS, ra_customer_merges m
WHERE site_use_id = m.duplicate_site_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N'
FOR UPDATE NOWAIT;
SELECT CUST_ACCT_PROFILE_AMT_ID
FROM HZ_CUST_PROFILE_AMTS yt, ra_customer_merges m
WHERE cust_account_id = m.duplicate_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N'
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'active accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status = 'A')
FOR UPDATE NOWAIT;
UPDATE HZ_CUST_PROFILE_AMTS yt
SET last_update_date = sysdate,
last_updated_by = arp_standard.profile.user_id,
last_update_login = arp_standard.profile.last_update_login,
request_id = req_id,
program_application_id = arp_standard.profile.program_application_id,
program_id = arp_standard.profile.program_id,
program_update_date = sysdate
WHERE site_use_id IN (
SELECT m.duplicate_site_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N' );
arp_message.set_name( 'AR', 'AR_ROWS_UPDATED' );
UPDATE HZ_CUST_PROFILE_AMTS yt
SET last_update_date = sysdate,
last_updated_by = arp_standard.profile.user_id,
last_update_login = arp_standard.profile.last_update_login,
request_id = req_id,
program_application_id = arp_standard.profile.program_application_id,
program_id = arp_standard.profile.program_id,
program_update_date = sysdate
WHERE cust_account_id IN (
SELECT m.duplicate_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'N' )
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'active accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status = 'A') ;
arp_message.set_name( 'AR', 'AR_ROWS_UPDATED' );
| delete_rows
|
| DESCRIPTION physically delete the rows we marked in customer tables after
| we merging each set.
|
| SCOPE - PUBLIC
|
| EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
|
| ARGUMENTS : IN:
| OUT:
| IN/ OUT:
|
| RETURNS : NONE
|
| NOTES
|
| MODIFICATION HISTORY
| Jianying Huang 20-DEC-00 Created for bug 1535542: physically delete
| rows in customer tables after merging each set.
| Jianying Huang 29-DEC-00 Modified 'delete_rows' for performance issue.
|
+===========================================================================*/
PROCEDURE delete_rows(
req_id NUMBER,
set_num NUMBER
) IS
CURSOR profiles IS
SELECT cust_account_profile_id
FROM HZ_CUSTOMER_PROFILES, ra_customer_merges m
WHERE cust_account_id = m.duplicate_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y'
AND status = 'D'
FOR UPDATE NOWAIT;
SELECT CUST_ACCT_PROFILE_AMT_ID
FROM HZ_CUST_PROFILE_AMTS, ra_customer_merges m
WHERE site_use_id = m.duplicate_site_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y'
FOR UPDATE NOWAIT;
SELECT CUST_ACCT_PROFILE_AMT_ID
FROM HZ_CUST_PROFILE_AMTS yt, ra_customer_merges m
WHERE cust_account_id = m.duplicate_id
AND m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y'
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'accounts exist'
FROM hz_cust_acct_sites_all acct --SSUptake
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.org_id = m.org_id --SSUptake
AND status <> 'D' )
FOR UPDATE NOWAIT;
arp_message.set_line( 'ARP_CMERGE_ARCPF.delete_rows()+' );
DELETE FROM HZ_CUSTOMER_PROFILES
WHERE cust_account_id IN (
SELECT m.duplicate_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y' )
AND status = 'D';
arp_message.set_name( 'AR', 'AR_ROWS_DELETED' );
DELETE FROM HZ_CUST_PROFILE_AMTS yt
WHERE site_use_id IN (
SELECT m.duplicate_site_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y' );
arp_message.set_name( 'AR', 'AR_ROWS_DELETED' );
DELETE FROM HZ_CUST_PROFILE_AMTS yt
WHERE cust_account_id IN (
SELECT m.duplicate_id
FROM ra_customer_merges m
WHERE m.process_flag = 'N'
AND m.request_id = req_id
AND m.set_number = set_num
AND m.delete_duplicate_flag = 'Y' )
AND site_use_id IS NULL
AND NOT EXISTS (
SELECT 'accounts exist'
FROM hz_cust_accounts acct
WHERE acct.cust_account_id = yt.cust_account_id
AND acct.status <> 'D' );
arp_message.set_name( 'AR', 'AR_ROWS_DELETED' );
arp_message.set_line( 'ARP_CMERGE_ARCPF.delete_rows()-' );
arp_message.set_error( 'ARP_CMERGE_ARCPF.delete_rows' );
END delete_rows;