組織同步的解決方案Ultimus之主管同步

CREATE OR REPLACE PACKAGE BODY GROUPSYNC_MANAGER is
PROCEDURE MyProcedure(Param1 IN NUMBER) is
a varchar2(100);
begin
a:='ddd';
end MyProcedure;

PROCEDURE HRM_UPDATE_MANAGER(P_EMP_ID IN VARCHAR2,P_EMP_NAME IN VARCHAR2,P_HR_DPT_ID IN VARCHAR2,P_VALID_FLAG IN NUMBER,P_M_DPT_ID IN VARCHAR2,P_EMP_JOB in VARCHAR2,P_USER IN VARCHAR2,ERRMSG OUT VARCHAR2)
IS
V_CR NUMBER;
V_COUNT_RECORD NUMBER;
V_EMP_NTACCNT VARCHAR2(255);
V_JOB_ID VARCHAR2(255);
V_HR_DPTNAME VARCHAR2(255);
V_M_DPTNAME VARCHAR2(255);
V_OLD_EMPID VARCHAR2(255);
V_OLD_DPTID VARCHAR2(255);
V_OLD_EMPNAME VARCHAR2(255);
V_DPT_LEVEL NUMBER;
V_OLD_JOBNAME VARCHAR2(255);
V_OLD_POSID VARCHAR2(255);
V_OLD_JOBID VARCHAR2(255);
V_OLD_DPTLEVEL NUMBER;
V_N_POSID VARCHAR2(255);
BEGIN
IF P_EMP_ID IS NULL OR P_EMP_NAME IS NULL OR P_HR_DPT_ID IS NULL OR P_M_DPT_ID IS NULL  or p_valid_flag is null THEN
ERRMSG:=0;--THIS FIELDS ARE NOT NULL
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
RETURN;
END IF;
IF P_VALID_FLAG>1 OR P_VALID_FLAG<0 THEN
ERRMSG:=1;--THIS VALUE IS INVALID
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
RETURN;
END IF;

BEGIN
SELECT TRIM(DPT_NAME) INTO V_HR_DPTNAME FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID);
EXCEPTION WHEN NO_DATA_FOUND THEN
ERRMSG:=2;--THIS HR_DPT_ID HAVE NO EXSITED
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
RETURN;
END;

BEGIN
SELECT TRIM(DPT_NAME) INTO V_M_DPTNAME FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
EXCEPTION WHEN NO_DATA_FOUND THEN
ERRMSG:=8;--THIS M_DPT_ID HAVE NO EXSITED
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
RETURN;
END;
  BEGIN
    SELECT NVL(TRIM(JOB_ID),'Staffer') INTO V_JOB_ID FROM RF_JOBFUNC WHERE TRIM(JOB_NAME)=TRIM(P_EMP_JOB);
  EXCEPTION WHEN NO_DATA_FOUND THEN
     V_JOB_ID:='Staffer';
  END;
--失效時
begin
IF P_VALID_FLAG=0 THEN
SELECT COUNT(*) INTO V_CR FROM RF_EMPLOYEE WHERE TRIM(EMP_ID)=LOWER(TRIM(P_EMP_ID));
IF V_CR>0 THEN
  SELECT EMP_NTACCNT,DPT_ID INTO V_EMP_NTACCNT,V_OLD_DPTID FROM ARCHIVE.RF_EMPLOYEE WHERE RTRIM(EMP_ID) = LOWER(RTRIM(P_EMP_ID));
  --IF TRIM(V_OLD_DPTID)<>TRIM(P_HR_DPT_ID) THEN
  --ERRMSG:=11;--傳入的部門ID同此人員WF中部門ID不一致
  --INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
  --RETURN;
  --END IF;
  SELECT COUNT(*) INTO V_COUNT_RECORD FROM WORKFLOW.STEP WHERE STATUS = 1 AND TRIM(CLIENT) = V_EMP_NTACCNT;
  IF V_COUNT_RECORD > 0 THEN
     ERRMSG :=4;-- 'THE EMPLOYEE HAVE UNFINISHED TASK';
  INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
     RETURN;
  END IF;
   IF P_HR_DPT_ID=P_M_DPT_ID THEN
     SELECT COUNT(*) INTO V_COUNT_RECORD FROM RF_POSITION WHERE TRIM(POS_ID)=TRIM(P_HR_DPT_ID)||'_Staffer';
     IF V_COUNT_RECORD=0 THEN
   ADDPOSITION(P_HR_DPT_ID||'_Staffer',P_HR_DPT_ID,V_HR_DPTNAME||'_一般員工',NULL,ERRMSG);
  IF ERRMSG IS NOT NULL THEN
  ERRMSG:=3;---ADD POSITION FAIL
  INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
  RETURN;
  END IF;
     END IF;
  UPDATE RF_EMPLOYEE SET POS_ID=TRIM(P_HR_DPT_ID)||'_Staffer' WHERE TRIM(EMP_ID)=LOWER(TRIM(P_EMP_ID));
 ELSE
 DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND  TRIM(EMP_ID)=LOWER(TRIM(P_EMP_ID));
 END IF;
ELSE
ERRMSG:=5;--NO PERSON!
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
RETURN;
END IF;
END IF;
exception when others then
errmsg:=10;--code error!
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
dbms_output.put_line('err');
end;
--生效更新時
begin
IF P_VALID_FLAG=1 THEN
SELECT COUNT(*) INTO V_CR  FROM RF_EMPLOYEE WHERE TRIM(EMP_ID)=LOWER(TRIM(P_EMP_ID));
IF V_CR>0 THEN--wf中有此人時
SELECT DPT_ID,POS_ID INTO V_OLD_DPTID,V_OLD_POSID  FROM RF_EMPLOYEE  WHERE  TRIM(EMP_ID)=LOWER(TRIM(P_EMP_ID));

IF TRIM(V_OLD_DPTID)=TRIM(P_HR_DPT_ID) THEN--判斷wf同hr關於此人是不是同一部門的
  BEGIN
   SELECT EMP_ID INTO V_OLD_EMPID FROM RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
 IF TRIM(V_OLD_EMPID)=TRIM(P_EMP_ID) THEN
 ERRMSG:=7;--此人已是此部門主管
 INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
 RETURN;
 END IF;
    DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
  EXCEPTION WHEN NO_DATA_FOUND THEN
 BEGIN
    SELECT EMP_ID,DPT_ID, EMP_CNAME,JOB_ID INTO V_OLD_EMPID,V_OLD_DPTID,V_OLD_EMPNAME,V_OLD_JOBID  FROM RF_EMPLOYEE WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
 IF TRIM(V_OLD_EMPID)=TRIM(P_EMP_ID) THEN
 ERRMSG:=7;--此人已是此部門主管
 INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
 RETURN;
 END IF;
 SELECT TRIM(JOB_NAME) INTO V_OLD_JOBNAME from RF_JOBFUNC WHERE TRIM(JOB_ID)=TRIM(V_OLD_JOBID);
 HRM_UPDATE_MANAGER(V_OLD_EMPID,V_OLD_EMPNAME,V_OLD_DPTID,0,V_OLD_DPTID,V_OLD_JOBNAME,P_USER,ERRMSG);
 IF ERRMSG IS NOT NULL THEN
 ERRMSG:=9;--原部門主管更新失敗
 INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
 RETURN;
 END IF;
 EXCEPTION WHEN NO_DATA_FOUND THEN
 ERRMSG:=NULL;
 END;
  END;
   SELECT DPT_LEVEL INTO V_DPT_LEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
 IF TRIM(P_M_DPT_ID)=TRIM(P_HR_DPT_ID) THEN
 UPDATE RF_EMPLOYEE SET POS_ID=TRIM(P_M_DPT_ID),JOB_ID=TRIM(V_JOB_ID),OC_GRADE=TRIM(V_DPT_LEVEL) WHERE TRIM(EMP_ID)=TRIM(P_EMP_ID);
 ELSE
 UPDATE RF_EMPLOYEE SET JOB_ID=TRIM(V_JOB_ID) WHERE TRIM(EMP_ID)=TRIM(P_EMP_ID);
 INSERT INTO RF_EMP_POS_ADD(EMP_ID,POS_ID,DPT_ID,OC_GRADE) VALUES(TRIM(P_EMP_ID),TRIM(P_M_DPT_ID),TRIM(P_M_DPT_ID),V_DPT_LEVEL);
 END IF;
ELSE--不是同一部門時

  BEGIN
  SELECT EMP_ID,DPT_ID, EMP_CNAME,JOB_ID INTO V_OLD_EMPID,V_OLD_DPTID,V_OLD_EMPNAME,V_OLD_JOBID FROM RF_EMPLOYEE WHERE TRIM(DPT_ID)=TRIM(V_OLD_DPTID) AND TRIM(POS_ID)=TRIM(V_OLD_DPTID) AND TRIM(EMP_ID)=TRIM(P_EMP_ID);
  SELECT DPT_LEVEL INTO V_OLD_DPTLEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(V_OLD_DPTID);
  SELECT EMP_NTACCNT INTO V_EMP_NTACCNT FROM ARCHIVE.RF_EMPLOYEE WHERE RTRIM(EMP_ID) = LOWER(RTRIM(P_EMP_ID));
  SELECT COUNT(*) INTO V_COUNT_RECORD FROM WORKFLOW.STEP WHERE STATUS = 1 AND TRIM(CLIENT) = V_EMP_NTACCNT;
  IF V_COUNT_RECORD > 0 THEN
     ERRMSG :=4;-- 'THE EMPLOYEE HAVE UNFINISHED TASK';
  INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
     RETURN;
  END IF;
  SELECT DPT_LEVEL INTO V_DPT_LEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
  IF TRIM(P_HR_DPT_ID)=TRIM(P_M_DPT_ID) THEN
    DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
  UPDATE RF_EMPLOYEE SET DPT_ID=TRIM(P_HR_DPT_ID),POS_ID=TRIM(P_M_DPT_ID),JOB_ID=TRIM(V_JOB_ID),OC_GRADE=TRIM(V_DPT_LEVEL) WHERE TRIM(EMP_ID)=TRIM(P_EMP_ID);
  INSERT INTO RF_EMP_POS_ADD(EMP_ID,POS_ID,DPT_ID,OC_GRADE) VALUES(TRIM(P_EMP_ID),TRIM(V_OLD_DPTID),TRIM(V_OLD_DPTID),V_OLD_DPTLEVEL);
  ELSE
    BEGIN
   SELECT EMP_ID INTO V_OLD_EMPID FROM RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID) AND TRIM(POS_ID)=TRIM(P_HR_DPT_ID);
  EXCEPTION WHEN NO_DATA_FOUND THEN  
 V_OLD_EMPID:=NULL;
  END; 
  IF TRIM(V_OLD_EMPID)=TRIM(P_EMP_ID) THEN
 DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID) AND TRIM(POS_ID)=TRIM(P_HR_DPT_ID);
 V_N_POSID:=TRIM(P_HR_DPT_ID);
 SELECT DPT_LEVEL INTO V_DPT_LEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID);
 ELSE
 V_N_POSID:=TRIM(P_HR_DPT_ID)||'_Staffer';
 V_DPT_LEVEL:=10;
   SELECT COUNT(*) INTO V_COUNT_RECORD FROM RF_POSITION WHERE TRIM(POS_ID)=TRIM(P_HR_DPT_ID)||'_Staffer';
    IF V_COUNT_RECORD=0 THEN
 ADDPOSITION(P_HR_DPT_ID||'_Staffer',P_HR_DPT_ID,V_HR_DPTNAME||'_一般員工',NULL,ERRMSG);
 IF ERRMSG IS NOT NULL THEN
 ERRMSG:=3;---ADD POSITION FAIL
 INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
 RETURN;
 END IF;
 END IF;
 END IF;
   DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
 UPDATE RF_EMPLOYEE SET DPT_ID=TRIM(P_HR_DPT_ID),POS_ID=V_N_POSID,JOB_ID=TRIM(V_JOB_ID),OC_GRADE=V_DPT_LEVEL WHERE TRIM(EMP_ID)=TRIM(P_EMP_ID);
    INSERT INTO RF_EMP_POS_ADD(EMP_ID,POS_ID,DPT_ID,OC_GRADE) VALUES(TRIM(P_EMP_ID),TRIM(P_M_DPT_ID),TRIM(P_M_DPT_ID),V_DPT_LEVEL);
  END IF;
  EXCEPTION WHEN NO_DATA_FOUND THEN
   SELECT DPT_LEVEL INTO V_DPT_LEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
   IF TRIM(P_HR_DPT_ID)=TRIM(P_M_DPT_ID) THEN
     DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
   UPDATE RF_EMPLOYEE SET DPT_ID=TRIM(P_HR_DPT_ID),POS_ID=TRIM(P_M_DPT_ID),JOB_ID=TRIM(V_JOB_ID),OC_GRADE=TRIM(V_DPT_LEVEL) WHERE TRIM(EMP_ID)=TRIM(P_EMP_ID);
  
   ELSE
 BEGIN
   SELECT EMP_ID INTO V_OLD_EMPID FROM RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID) AND TRIM(POS_ID)=TRIM(P_HR_DPT_ID);
  EXCEPTION WHEN NO_DATA_FOUND THEN  
 V_OLD_EMPID:=NULL;
  END; 
  IF TRIM(V_OLD_EMPID)=TRIM(P_EMP_ID) THEN
 DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID) AND TRIM(POS_ID)=TRIM(P_HR_DPT_ID);
 V_N_POSID:=TRIM(P_HR_DPT_ID);
 SELECT DPT_LEVEL INTO V_DPT_LEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID);
 ELSE
 V_N_POSID:=TRIM(P_HR_DPT_ID)||'_Staffer';
 V_DPT_LEVEL:=10;
   SELECT COUNT(*) INTO V_COUNT_RECORD FROM RF_POSITION WHERE TRIM(POS_ID)=TRIM(P_HR_DPT_ID)||'_Staffer';
    IF V_COUNT_RECORD=0 THEN
 ADDPOSITION(P_HR_DPT_ID||'_Staffer',P_HR_DPT_ID,V_HR_DPTNAME||'_一般員工',NULL,ERRMSG);
 IF ERRMSG IS NOT NULL THEN
 ERRMSG:=3;---ADD POSITION FAIL
 INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
 RETURN;
 END IF;
 END IF;
 END IF;
   DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND TRIM(POS_ID)=TRIM(P_M_DPT_ID);
 UPDATE RF_EMPLOYEE SET DPT_ID=TRIM(P_HR_DPT_ID),POS_ID=V_N_POSID,JOB_ID=TRIM(V_JOB_ID),OC_GRADE=V_DPT_LEVEL WHERE TRIM(EMP_ID)=TRIM(P_EMP_ID);
    INSERT INTO RF_EMP_POS_ADD(EMP_ID,POS_ID,DPT_ID,OC_GRADE) VALUES(TRIM(P_EMP_ID),TRIM(P_M_DPT_ID),TRIM(P_M_DPT_ID),V_DPT_LEVEL);
   END IF;  
  END;
END IF;

ELSE--wf中無有此人時
 --清除原有主管即改變其職位為一般員工
 SELECT COUNT(*) INTO V_COUNT_RECORD FROM RF_EMPLOYEE WHERE TRIM(POS_ID)=TRIM(P_M_DPT_ID) AND TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
 IF V_COUNT_RECORD>0 THEN
    SELECT EMP_ID,DPT_ID, EMP_CNAME,JOB_ID INTO V_OLD_EMPID,V_OLD_DPTID,V_OLD_EMPNAME,V_OLD_JOBID  FROM RF_EMPLOYEE WHERE TRIM(POS_ID)=TRIM(P_M_DPT_ID) AND TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
    SELECT TRIM(JOB_NAME) INTO V_OLD_JOBNAME from RF_JOBFUNC WHERE TRIM(JOB_ID)=TRIM(V_OLD_JOBID);
     HRM_UPDATE_MANAGER(V_OLD_EMPID,V_OLD_EMPNAME,V_OLD_DPTID,0,V_OLD_DPTID,V_OLD_JOBNAME,P_USER,ERRMSG);
     IF ERRMSG IS NOT NULL THEN
     ERRMSG:=9;--原部門主管更新失敗
     INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
     RETURN;
     END IF; 
  ELSE
    SELECT COUNT(*) INTO V_COUNT_RECORD FROM RF_EMP_POS_ADD WHERE  TRIM(POS_ID)=TRIM(P_M_DPT_ID) AND TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
    DELETE RF_EMP_POS_ADD WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID) AND  TRIM(POS_ID)=TRIM(P_M_DPT_ID);
  END IF;
 
  ----添加部門主管
  IF P_HR_DPT_ID=P_M_DPT_ID THEN
  SELECT DPT_LEVEL INTO V_DPT_LEVEL FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID);
  ADDEMPLOYEE(P_EMP_ID,P_HR_DPT_ID,V_JOB_ID,P_HR_DPT_ID,P_EMP_NAME,P_EMP_NAME,P_EMP_ID,NULL,1,V_DPT_LEVEL,NULL,ERRMSG);    
     IF ERRMSG IS NOT NULL THEN
     ERRMSG:=6;--添加部門主管失敗
     INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
     RETURN;
     END IF;
  ELSE
   SELECT DPT_LEVEL,DPT_NAME INTO V_DPT_LEVEL,V_HR_DPTNAME FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_HR_DPT_ID);
   SELECT COUNT(*) INTO V_COUNT_RECORD FROM RF_POSITION WHERE TRIM(POS_ID)=TRIM(P_HR_DPT_ID)||'_Staffer';
       IF V_COUNT_RECORD=0 THEN
    ADDPOSITION(P_HR_DPT_ID||'_Staffer',P_HR_DPT_ID,V_HR_DPTNAME||'_一般員工',NULL,ERRMSG);
   IF ERRMSG IS NOT NULL THEN
   ERRMSG:=3;---ADD POSITION FAIL
   INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
   RETURN;
   END IF;
   END IF;
   ADDEMPLOYEE(P_EMP_ID,P_HR_DPT_ID,V_JOB_ID,P_HR_DPT_ID||'_Staffer',P_EMP_NAME,P_EMP_NAME,P_EMP_ID,NULL,1,V_DPT_LEVEL,NULL,ERRMSG);    
     IF ERRMSG IS NOT NULL THEN
     ERRMSG:=6;--添加部門主管失敗
     INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
     RETURN;
     END IF;
   SELECT DPT_LEVEL INTO V_DPT_LEVEL  FROM RF_DEPT WHERE TRIM(DPT_ID)=TRIM(P_M_DPT_ID);
   INSERT INTO RF_EMP_POS_ADD(EMP_ID,POS_ID,DPT_ID,OC_GRADE) VALUES(P_EMP_ID,P_M_DPT_ID,P_M_DPT_ID,10);
  END IF;
END IF;
END IF;
exception when others then
errmsg:=10;--code error!
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
dbms_output.put_line('err1');
end;
INSERT INTO UP_MANAGERUP_LOGTOHR(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,MFLAG,ERRMSG,MAINT_USER) VALUES(P_EMP_ID,P_EMP_NAME,P_HR_DPT_ID,P_VALID_FLAG,P_M_DPT_ID,P_EMP_JOB,2,ERRMSG,P_USER);
END HRM_UPDATE_MANAGER;
end;
/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13538095/viewspace-211693/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13538095/viewspace-211693/

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值