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
|
DECLARE
CURSOR C_Trajet IS
with mydata as
(SELECT 1 id,'01/01/2018' dt, 'PAR' dpt, 'STR' arv FROM dual UNION
SELECT 1,'01/01/2018' , 'STR' , 'PAR' FROM dual UNION
SELECT 2,'01/01/2018' , 'LYO' , 'NIC' FROM dual UNION
SELECT 3,'01/01/2018' , 'LIL' , 'PAR' FROM dual UNION
SELECT 3,'07/01/2018' , 'PAR' , 'LIL' FROM dual UNION
SELECT 3,'07/01/2018' , 'LIL' , 'PAR' FROM dual UNION
SELECT 4,'05/01/2018' , 'PAR' , 'QUE' FROM dual UNION
SELECT 4,'05/01/2018' , 'NIC' , 'MAR' FROM dual UNION
SELECT 5,'19/01/2018' , 'MAR' , 'PAR' FROM dual
)
select id, dt, dpt, arv,
LEAD(id) OVER(PARTITION BY null ORDER BY id) Next_Id,
LEAD(dt) OVER(PARTITION BY id ORDER BY id,dt) Next_Dt
from mydata;
A_Trajet_Dpt VARCHAR2(250);
A_Trajet_Arv VARCHAR2(250);
L_RUPTURE BOOLEAN;
BEGIN
FOR i IN C_Trajet LOOP
-- Concat pour même client et date départ
IF (TRIM(A_Trajet_Dpt)) IS NULL THEN
A_Trajet_Dpt := i.dpt;
ELSE
A_Trajet_Dpt := A_Trajet_Dpt||'-'||i.dpt;
END IF;
IF (TRIM(A_Trajet_Arv)) IS NULL THEN
A_Trajet_Arv := i.arv;
ELSE
A_Trajet_Arv := A_Trajet_Arv||'-'||i.arv;
END IF;
-- Rupture client / date ?
IF (i.id <> NVL(i.Next_Id,-1) OR i.dt <> NVL(i.Next_Dt,'01/01/1901')) THEN
L_Rupture := TRUE;
END IF;
-- Insert
IF (L_Rupture) THEN
-- INSERT à ajouter ici
dbms_output.put_line('Ajout '||i.id||'-'||i.dt||' : Dpt '||A_Trajet_Dpt||' / Arv '||A_Trajet_Arv);
L_Rupture := FALSE;
A_Trajet_Dpt := NULL;
A_Trajet_Arv := NULL;
END IF;
END LOOP;
END;
/ |
Partager