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