1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
   | create or replace 
PACKAGE BODY "SCORING" AS
 
  v_per cm_personne%RowType;
  plsql_block VARCHAR2(100);
  N_ret number;
  C_RET varchar2(100);
  D_RET date;
 
 --FONCTION SCORE par personne    
  Function SCORER_CRITERE_PERSONNE (p_id_per varchar2,p_cod_mod varchar2,p_num_ver number )RETURN number IS 
 
    v_cod_niv varchar2(5);
    v_not_eva number;
    NOT_GLO number:=0;
     SC_FAM varchar2(100);
  SC_AGE_P number;
 
    CURSOR c_cri IS
    SELECT M.COD_CRI,M.POI_CRI,C.NOM_FCT,C.TYP_NIV,C.TYP_ZON
    FROM SC_CRITERE_MODELE M,SC_CRITERE C
    WHERE M.COD_MOD=p_cod_mod and M.NUM_VER=p_num_ver and M.COD_cri = c.cod_cri and M.cod_lan=C.cod_lan ;
   -- DBMS_OUTPUT.PUT_LINE ('  '||M.COD_CRI||M.POI_CRI||C.NOM_FCT||C.TYP_NIV||C.TYP_ZON);
  BEGIN
 
    SELECT * INTO v_per FROM cm_personne WHERE id_per=p_id_per ;
 
 
 
 -- Récupération des citére de scoring pour un modéle et une version
  FOR cri IN c_cri
   LOOP 
     IF cri.TYP_ZON ='N' THEN
       begin
         plsql_block := 'BEGIN '||cri.NOM_FCT||'; END;';
         --plsql_block := 'BEGIN :X:='||cri.NOM_FCT||'; END;';
         EXECUTE IMMEDIATE plsql_block USING OUT N_ret; 
         DBMS_OUTPUT.PUT_LINE (N_ret);
       end;
       begin
         IF  cri.TYP_NIV = 'T' then
            select cod_niv into v_cod_niv
            from  sc_niveau_critere
            where cod_cri=cri.COD_CRI and N_ret between to_number(nvl(BOR_INF_EVA,-9999999999999999999)) and to_number(nvl(BOR_SUP_EVA,999999999999999999999));   
          -- Fixe
         elsif  cri.TYP_NIV = 'F' then
            select cod_niv into v_cod_niv
            from  sc_niveau_critere
            where N_ret=to_number(val_NIV_FIX) and cod_cri=cri.COD_CRI;
            DBMS_OUTPUT.PUT_LINE (v_cod_niv);
         end if;
         select not_eva into v_not_eva
         from sc_note_critere_modele
         where cod_niv=v_cod_niv and cod_cri=cri.COD_CRI;
          DBMS_OUTPUT.PUT_LINE (v_not_eva);
       exception
          when others then     
              select nvl(min(not_eva),-99) into v_not_eva
              from sc_note_critere_modele
              where cod_cri=cri.COD_CRI;
              DBMS_OUTPUT.PUT_LINE (v_not_eva);
       end;
       ELSIF cri.TYP_ZON ='C' THEN
       begin
         plsql_block := ('BEGIN :X:='||cri.NOM_FCT||'; END;');
         EXECUTE IMMEDIATE plsql_block USING OUT C_RET;  
         DBMS_OUTPUT.PUT_LINE (C_ret);
       end;
       begin
         IF  cri.TYP_NIV = 'T' then
            select cod_niv into v_cod_niv
            from  sc_niveau_critere
            where cod_cri=cri.COD_CRI and C_RET between BOR_INF_EVA and BOR_SUP_EVA;   
          -- Fixe
         elsif  cri.TYP_NIV = 'F' then
            select cod_niv into v_cod_niv
            from  sc_niveau_critere
            where C_RET=to_char(val_NIV_FIX) and cod_cri=cri.COD_CRI;
            DBMS_OUTPUT.PUT_LINE (v_cod_niv);
         end if;
         select not_eva into v_not_eva
         from sc_note_critere_modele
         where cod_niv=v_cod_niv and cod_cri=cri.COD_CRI;
         DBMS_OUTPUT.PUT_LINE (v_not_eva);
       exception
          when others then     
              select nvl(min(not_eva),-99) into v_not_eva
              from sc_note_critere_modele
              where cod_cri=cri.COD_CRI;
              DBMS_OUTPUT.PUT_LINE (v_not_eva);
       end;
       ELSIF cri.TYP_ZON ='D' THEN
       begin
         plsql_block := ('BEGIN :X:='||cri.NOM_FCT||'; END;');
         EXECUTE IMMEDIATE plsql_block USING OUT D_RET;  
       end;
       begin
         IF  cri.TYP_NIV = 'T' then
            select cod_niv into v_cod_niv
            from  sc_niveau_critere
            where cod_cri=cri.COD_CRI and D_RET between to_date(nvl(BOR_INF_EVA,-9999999999999999999)) and to_date(nvl(BOR_SUP_EVA,999999999999999999999));   
          -- Fixe
         elsif  cri.TYP_NIV = 'F' then
            select cod_niv into v_cod_niv
            from  sc_niveau_critere
            where D_RET=to_date(val_NIV_FIX) and cod_cri=cri.COD_CRI;
            DBMS_OUTPUT.PUT_LINE (v_cod_niv);
         end if;
         select not_eva into v_not_eva
         from sc_note_critere_modele
         where cod_niv=v_cod_niv and cod_cri=cri.COD_CRI;
         DBMS_OUTPUT.PUT_LINE (v_not_eva);
       exception
          when others then     
              select nvl(min(not_eva),-99) into v_not_eva
              from sc_note_critere_modele
              where cod_cri=cri.COD_CRI;
              DBMS_OUTPUT.PUT_LINE (v_not_eva);
       end;
 
      end if;
      NOT_GLO:=NOT_GLO+v_not_eva;  
      DBMS_OUTPUT.PUT_LINE ('NOT_GLO');
END LOOP;
 return NOT_GLO;
end;      
 
-- Fonction calcule Age pour une personne physique
Function SC_AGE_P RETURN number is
 
  v_age_p number;    
  begin
--v_age_p:= TRUNC(SYSDATE,'yyyy') - TRUNC( v_per.DAT_NAI_PER,'yyyy');
v_age_p:= months_between(trunc(SYSDATE,'yyyy'), trunc( v_per.DAT_NAI_PER,'yyyy'))/12;
DBMS_OUTPUT.PUT_LINE ('v_age_p');
return v_age_p;
end;
 
--Fonction calcule Age pour une personne morale
Function SC_AGE_M RETURN number is
 
  v_age_m number;    
  begin
 
v_age_m:= to_number(to_char(SYSDATE,'yyyy')) - to_number(to_char( v_per.DAT_ENT_EXP,'yyyy'));
 
 
return v_age_m;
end;
-- Fonction permet de récupérer Etat Civil
  Function SC_FAM RETURN varchar is
 
    v_fam varchar2(30);    
    v_COD_ETA_CIV varchar2(10);
 
    BEGIN
 
    v_COD_ETA_CIV:= v_per.COD_ETA_CIV;
    select LIB_ETA_CIV into v_FAM
    from RF_ETAT_CIVIL 
    where COD_ETA_CIV=v_COD_ETA_CIV and cod_lan='FR';
  DBMS_OUTPUT.PUT_LINE (v_FAM);
  RETURN v_FAM;
END;
 
 
END "SCORING"; | 
Partager