Erp100论坛's Archiver

gaoyiming 发表于 2008-7-29 17:36

批量更新员工入职日期 Oracle HRMS API 晒太阳

发现系统历史数据中,有好几千人的入职日期都错了,是由于一期项目的时候,没有上HR,所以搞进入的员工的入职日期都是错误的,所以写了个 tst脚本。
哗啦啦一下下搞定了,4000多人大概6分钟。

-- Created on 2008-7-29 by Mark Gao
DECLARE
  -- Local variables here
  i                INTEGER;
  o_warn_ee        VARCHAR2(200);
  o_err_code       NUMBER;
  o_err_msg        NUMBER;
  i_person_id      NUMBER;
  i_old_start_date DATE;
  i_new_start_date DATE;
  CURSOR p_id IS
    SELECT pe.person_id,
           pe.start_date old_date,
           to_date(pu.start_date, 'yyyy-mm-dd') new_date,
           pe.employee_number
      FROM per_all_people_f pe, xxsg_hr_people_update_temp pu,per_all_assignments_f pa
     WHERE pe.employee_number = TRIM(pu.employee_number)
     And pe.person_id = pa.person_id
     And pe.start_date Between pa.effective_start_date And pa.effective_end_date
     And pa.supervisor_id Is  Null
       AND pe.start_date BETWEEN pe.effective_start_date AND
           pe.effective_end_date
       AND pe.business_group_id = 0;
BEGIN
  -- Test statements here
  FOR c1 IN p_id LOOP
  
    hr_change_start_date_api.update_start_date(p_validate         => FALSE,
                                               p_person_id        => c1.person_id,
                                               p_old_start_date   => c1.old_date,
                                               p_new_start_date   => c1.new_date,
                                               p_update_type      => 'E',
                                               p_applicant_number => NULL,
                                               p_warn_ee          => o_warn_ee);
  
  END LOOP;
/*EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(substr(SQLERRM, 1, 300));*/
END;

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2007 Comsenz Inc.