The requirement was to add phone details ( Work phone number, work mobile number) a list of employees.
We have implemented this using hr_phone_api
Process
Steps:
1.
Create a temp table
CREATE TABLE load_phone_tempASSELECT parent_id,phone_number work_phone,phone_number mobile_phone FROM per_phones WHERE 1=2;2.Load
data from excel workbook to temp table using sql loader. Sample control file
below.
LOAD DATA INFILE * REPLACE INTO TABLE load_phone_temp FIELDS TERMINATED BY "," ( parent_id, work_phone,mobile_phone ) begindata111,2222222,33333333 sqlldr control = "control_file_path" user_id=userid/password@DBServicename3.Run
the script below which picks up records from temp table and creates contact
details for employees
/* Formatted on 2014/06/23 21:48 (Formatter Plus v4.8.8) */CONNECT apps/&1SET serveroutput on DECLARE ln_work_phone_id per_phones.phone_id%TYPE; ln_mobile_phone_id per_phones.phone_id%TYPE; ln_object_version_number per_phones.object_version_number%TYPE; CURSOR c_phone_tmp IS SELECT * FROM load_phone_temp; l_person_id load_phone_temp.parent_id%TYPE; l_count NUMBER := 0; l_loc NUMBER := 0;BEGIN l_loc := 1; FOR r_phone_tmp IN c_phone_tmp LOOP l_loc := 2; DBMS_OUTPUT.put_line (' Employee Number ' || r_phone_tmp.parent_id); l_count := l_count + 1; l_loc := 2; BEGIN SELECT person_id INTO l_person_id FROM per_all_people_f WHERE employee_number = r_phone_tmp.parent_id AND TRUNC (SYSDATE) BETWEEN effective_start_date AND effective_end_date; l_loc := 3; BEGIN IF r_phone_tmp.work_phone IS NOT NULL THEN --DBMS_OUTPUT.put_line ('Inside work phone'); -- Create or Update Employee Phone Detail-- ----------------------------------------------------------- l_loc := 4; hr_phone_api.create_phone ( -- Input data elements -- ----------------------------- p_date_from => TRUNC (SYSDATE), p_phone_type => 'W1', p_phone_number => r_phone_tmp.work_phone, p_parent_id => l_person_id, p_parent_table => 'PER_ALL_PEOPLE_F', p_effective_date => TRUNC (SYSDATE),-- Output data elements-- -------------------------------- p_phone_id => ln_work_phone_id, p_object_version_number => ln_object_version_number ); DBMS_OUTPUT.put_line ('work phone id ' || ln_work_phone_id); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Employee Number -> ' || r_phone_tmp.parent_id || 'Error->' || SQLERRM ); END; l_loc := 5; BEGIN IF r_phone_tmp.mobile_phone IS NOT NULL THEN --DBMS_OUTPUT.put_line ('Inside work mobile phone');-- Create or Update Employee Phone Detail-- ----------------------------------------------------------- l_loc := 6; hr_phone_api.create_phone ( -- Input data elements -- ----------------------------- p_date_from => TRUNC (SYSDATE), p_phone_type => 'WM', p_phone_number => r_phone_tmp.mobile_phone, p_parent_id => l_person_id, p_parent_table => 'PER_ALL_PEOPLE_F', p_effective_date => TRUNC (SYSDATE),-- Output data elements-- -------------------------------- p_phone_id => ln_mobile_phone_id, p_object_version_number => ln_object_version_number ); DBMS_OUTPUT.put_line ( 'Location ' || l_loc || 'mobile phone id ' || ln_mobile_phone_id ); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Employee Number -> ' || r_phone_tmp.parent_id || 'Error->' || SQLERRM ); END; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Employee Number -> ' || r_phone_tmp.parent_id || 'Error->' || SQLERRM ); END; END LOOP; DBMS_OUTPUT.put_line ('Total No Of records processed -> ' || l_count); COMMIT;EXCEPTION WHEN OTHERS THEN ROLLBACK; DBMS_OUTPUT.put_line (l_loc || ' ' || SQLERRM);END;/ SHOW ERR;To
check different phone types an employee can have, please check HR_LOOKUPS table
for lookup type ‘PHONE_TYPE’
4.
Word of caution – Though I have tested and implemented this, would suggest you
test thoroughly before implementing it in LIVE.
