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
|
------------------------------------------------------------------------------------------------
--
-- USE-CASE : un utilisateur charge une journée sur l'itération 1 sur une mauvaise ligne BIP
--
-- Entre l'itération 1 et l'itération 2, l'utilisateur a corrigé sa timesheet
--
-- Pour l'itération 2, le MERGE va insérer la bonne charge sur le bon code BIP
--
-- Le SELECT et la boucle FOR..LOOP ci dessous va rechercher dans l'historique
-- (toute l'année courante SAUF l'itération courante) toutes les combinaisons possibles
-- la clause NOT EXISTS permet d'enlever toutes les combinaisons de l'itération courante.
-- Le BULK COLLECT INTO va stocker toutes les données en mémoire
--
-- La boucle FOR..LOOP va traiter toutes les combinaisons manquantes pour l'itération courante
-- Elle va insérer les combinaisons manquantes tout en positionnant les consommés à zéro.
--
------------------------------------------------------------------------------------------------
--
-- 1. Traitement SELECT => Sauvegarde en mémoire des combinaisons manquantes
dbms_output.put_line(to_char(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') ||
' DEBUT Calcul des combinaisons manquantes...');
SELECT t.bip_row
,t.bip_step_type
,t.bip_sub_task_type
,t.bip_step_task_sub_task
,t.bip_resource_id
,t.bip_activity
,t.bip_month --
BULK COLLECT
INTO lst_bip_actuals_test
FROM sg_gims_bip_actuals_test t
WHERE NOT (t.act_year = n_year AND t.act_month = n_month AND
t.act_iter = n_iter)
AND NOT EXISTS
(SELECT s.bip_row
,s.bip_step_type
,s.bip_sub_task_type
,s.bip_step_task_sub_task
,s.bip_resource_id
,s.bip_activity
,s.bip_month
FROM sg_gims_bip_actuals_test s
WHERE s.act_year = n_year
AND s.act_month = n_month
AND s.act_iter = n_iter
AND t.bip_row = s.bip_row
AND t.bip_step_type = s.bip_step_type
AND nvl(t.bip_sub_task_type, '#@#NULL#@#') =
nvl(s.bip_sub_task_type, '#@#NULL#@#')
AND t.bip_step_task_sub_task = s.bip_step_task_sub_task
AND t.bip_resource_id = s.bip_resource_id
AND t.bip_activity = s.bip_activity
AND t.bip_month = s.bip_month
GROUP BY s.bip_row
,s.bip_step_type
,s.bip_sub_task_type
,s.bip_step_task_sub_task
,s.bip_resource_id
,s.bip_activity
,s.bip_month)
GROUP BY t.bip_row
,t.bip_step_type
,t.bip_sub_task_type
,t.bip_step_task_sub_task
,t.bip_resource_id
,t.bip_activity
,t.bip_month;
--
n_sql_num := 150;
-- Les données sont stockées dans la table mémoire lst_bip_actuals_test
IF lst_bip_actuals_test.FIRST IS NOT NULL THEN
-- Balayage de la table mémoire
dbms_output.put_line(to_char(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') ||
' ---- Combinaisons manquantes identifiées...');
dbms_output.put_line(to_char(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') ||
' ---- Il y a ' || lst_bip_actuals_test.COUNT ||
'combinaisons manquantes identifiées...');
FOR i IN lst_bip_actuals_test.FIRST .. lst_bip_actuals_test.LAST LOOP
/* -- DEBUG
dbms_output.put_line(i);
dbms_output.put('bip_row = ' || lst_bip_actuals_test(i).bip_row);
dbms_output.put(' bip_step_type = ' || lst_bip_actuals_test(i).bip_step_type);
dbms_output.put(' bip_sub_task_type = ' || lst_bip_actuals_test(i).bip_sub_task_type);
dbms_output.put(' bip_step_task_sub_task = ' || lst_bip_actuals_test(i).bip_step_task_sub_task);
dbms_output.put_line(' bip_resource_id = ' || lst_bip_actuals_test(i).bip_resource_id);
-- DEBUG */
n_sql_num := 160;
-- |
Partager