I am working on a complex update where I need to update the data in one table based on the output from another table.
Scenario:
Table 1: HZ_CUST_ACCOUNTS (FK PARTY_ID FROM HZ_PARTIES)
PARTY_ID | CUST_ACCOUNT_ID |
---|---|
123 | 567 |
Table 2 HZ_PARTIES
PARTY_ID | NAME |
---|---|
123 | XYZ |
Table 3 HZ_CONTACT_POINTS (FK PARTY_ID FROM HZ_PARTIES)
OWNER_TABLE_ID | OWNER_TABLE_NAME | |
---|---|---|
123 | XYZ@GMAIL | HZ_PARTIES |
123 | ABC@GMAIL | HZ_PARTY_SITES |
Table 4: Customer_dimension_table
cust_account_id | customer_id |
---|---|
567 | 879 |
Table 5: Contact_dimension_table(target table)
customer_id | name | |
---|---|---|
879 | XYZ | NULL |
999 | XYZ | NULL |
879 | ABC | NULL |
I need your expertise in filling up the email address for the XYZ based on the above source table. Is this transformation possible? I am trying to fetch the contacts in oracle ebs but in the main query it is giving me the wrong email address for some of the parties as some of the parties have party_id(hz_parties) matching with the party_site_id(in HZ_party_sites). Hence I wanted to make an update so that it can update the correct email_address but update approach seems not to be working.
Here is the problematic query:
SELECT hcar.cust_account_role_id,
hcar.current_role_state,
hcar.role_type,
hcar.status,
hcar.cust_account_id,
hcar.cust_acct_site_id/* , ( SELECT hp.party_name
FROM hz_parties hp
WHERE 1=1
AND hp.party_id = hcar.party_id
) contact_name */
,
(SELECT hp.party_name
FROM hz_parties hp, hz_relationships hr
WHERE 1 = 1
AND hr.party_id = hcar.party_id
AND hp.party_id = hr.object_id
AND hr.object_type = 'PERSON'
AND hr.relationship_code IN
('CONTACT', 'EMPLOYER_OF'))
contact_name,
hcp.contact_point_id,
hcp.phone_country_code,
NVL(hcp.phone_area_code, (SELECT hcp.phone_area_code
FROM hz_contact_points hcp
WHERE 1 = 1
AND hcp.owner_table_id = hcar.party_id
AND hcp.phone_line_type(+) = 'GEN'
AND hcp.phone_area_code IS NOT NULL
--AND hcp.primary_flag(+) = 'Y'
AND hcp.contact_point_id =
(SELECT MAX (hcp2.contact_point_id)
FROM hz_contact_points hcp2
WHERE 1 = 1
AND hcp2.phone_line_type(+) = 'GEN'
AND hcp2.primary_flag(+) = 'Y'
AND hcp2.owner_table_id =
hcp.owner_table_id))) phone_area_code,
NVL(hcp.phone_number, (SELECT hcp.phone_number
FROM hz_contact_points hcp
WHERE 1 = 1
AND hcp.owner_table_id = hcar.party_id
AND hcp.phone_line_type(+) = 'GEN'
--AND hcp.primary_flag(+) = 'Y'
AND hcp.phone_number IS NOT NULL
AND hcp.contact_point_id =
(SELECT MAX (hcp2.contact_point_id)
FROM hz_contact_points hcp2
WHERE 1 = 1
AND hcp2.phone_line_type(+) = 'GEN'
--AND hcp2.primary_flag(+) = 'Y'
AND hcp2.owner_table_id =
hcp.owner_table_id))) phone_number,
NVL(hcp.phone_extension, (SELECT hcp.phone_extension
FROM hz_contact_points hcp
WHERE 1 = 1
AND hcp.owner_table_id = hcar.party_id
AND hcp.phone_line_type(+) = 'GEN'
-- AND hcp.primary_flag(+) = 'Y'
AND hcp.phone_extension IS NOT NULL
AND hcp.contact_point_id =
(SELECT MAX (hcp2.contact_point_id)
FROM hz_contact_points hcp2
WHERE 1 = 1
AND hcp2.phone_line_type(+) = 'GEN'
--AND hcp2.primary_flag(+) = 'Y'
AND hcp2.owner_table_id =
hcp.owner_table_id))) phone_extension ,
NVL(hcp.email_address,
NVL(( SELECT MAX(SUBSTR (hcp.email_address, 1, 50))
FROM hz_contact_points hcp
WHERE 1 = 1
AND hcp.owner_table_id IN (SELECT hr3.party_id
FROM hz_parties hp3,
hz_relationships hr3,
hz_cust_account_roles hcar3
WHERE 1 = 1
AND hr3.party_id = hcar3.party_id
AND hp3.party_id = hr3.object_id
AND hr3.object_type = 'PERSON'
AND hr3.relationship_code IN
('CONTACT', 'EMPLOYER_OF')
and hcar.cust_account_id=hcar3.cust_account_id
and hp3.party_name = (SELECT hp1.party_name
FROM hz_parties hp1, hz_relationships hr1
WHERE 1 = 1
AND hr1.party_id= hcar.party_id
AND hp1.party_id = hr1.object_id
AND hr1.object_type = 'PERSON'
AND hr1.relationship_code IN
('CONTACT', 'EMPLOYER_OF')) )
--= hcar.party_id
AND hcp.contact_point_type = 'EMAIL'
AND hcp.email_address IS NOT NULL
),
( (SELECT hp.email_address
FROM hz_parties hp
WHERE 1 = 1
AND hp.party_id = hcar.party_id ))
)
) email_address,
(SELECT DECODE (hcp2.contact_point_type,
'TLX', hcp2.telex_number,
hcp2.phone_number)
FROM hz_contact_points hcp2, fnd_lookup_values flv
WHERE 1 = 1
AND hcp2.contact_point_id = hcp.contact_point_id
AND hcp2.contact_point_type NOT IN ('EDI')
AND hcp2.owner_table_id = hcar.party_id
AND hcp2.primary_flag = 'Y'
AND NVL (hcp2.phone_line_type,
hcp2.contact_point_type) = 'FAX'
AND NVL (hcp2.phone_line_type,
hcp2.contact_point_type) = flv.lookup_code
AND ( ( flv.lookup_type = 'COMMUNICATION_TYPE'
AND flv.lookup_code IN
('PHONE', 'TLX', 'EMAIL', 'WEB'))
OR (flv.lookup_type = 'PHONE_LINE_TYPE'))
AND flv.language = USERENV ('LANG')
AND flv.view_application_id = 222
AND flv.security_group_id = 0)
fax,
(SELECT SUBSTR (NVL (hoc.job_title, hoc.job_title_code),
1,
250)
FROM hz_org_contacts hoc, hz_relationships hr
WHERE 1 = 1
AND hoc.party_relationship_id = hr.relationship_id
AND hr.party_id = hcar.party_id
AND hr.object_type = 'ORGANIZATION'
AND hr.directional_flag = 'F')
job_title,
'ORACLE' data_source,
hcp.primary_flag
FROM hz_cust_account_roles hcar, hz_contact_points hcp
WHERE 1 = 1
-- AND hcar.current_role_state = 'A'
AND hcp.owner_table_id(+) = hcar.party_id
AND hcp.primary_flag(+) = 'Y'
AND hcar.party_id IN
(SELECT hr.party_id
FROM hz_org_contacts hoc, hz_relationships hr
WHERE 1 = 1
AND hoc.party_relationship_id =
hr.relationship_id
AND hr.object_type = 'ORGANIZATION'
AND hr.directional_flag = 'F'
AND hoc.last_update_date > SYSDATE -5
UNION
SELECT party_id
FROM hz_cust_account_roles
WHERE last_update_date > SYSDATE - 5
)