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
| CREATE MATERIALIZED VIEW VUE_MATERIALISEE ("CHAMP_STR1", "CHAMP_FLAG", "CHAMP_NUM1", "CHAMP_STR3", "CHAMP_NUM2", "CHAMP_STR4", "DATE_DEBUT_STR", "DATE_DEBUT", "DATE_FIN_STR", "DATE_FIN")
TABLESPACE TAB_XXX
AS
WITH TGN AS (
SELECT TGN_STR, min(path) keep(dense_rank last order by l) path, max(l) l
FROM (
select TGN_STR, level l, SYS_CONNECT_BY_PATH(TGN_STR, '|') path
from TABLE_TGN_STR
connect by prior TGN_STR=TGN_STR_PERE
)
GROUP BY TGN_STR
)
SELECT CHAMP_STR1, CHAMP_FLAG, dense_rank() over(partition by CHAMP_STR1, CHAMP_FLAG order by CHAMP_NUM1) CHAMP_NUM1, CHAMP_STR3, CHAMP_NUM2, CHAMP_STR4, date_debut_str, date_debut, date_fin_str, date_fin
FROM
(
SELECT CHAMP_STR1 CHAMP_STR1,
DECODE(CHAMP_FLAG, 'E', 0, 1) CHAMP_FLAG,
100-10*(decode(instr(TGN1.path, act.TGA),0,0,instr(TGN1.path, act.TGA)-2))/4 +
1000-100*(decode(instr(TGN2.path, act.TGB),0,0,instr(TGN2.path,act.TGB)-2))/4 +
1000*tgn1.l +
10000*tgn2.l +
DECODE(INFO, NULL, 4, 0) +
DECODE(act.C1,
NULL, 3,
DECODE(act.C2,
NULL, 2,
DECODE(act.C3, NULL, 1, 0))
) CHAMP_NUM1,
TRIM(RPAD(act.C6, 4)||
act.C5||
RPAD(tgn1.TGN_STR, 3)||
RPAD(tgn2.TGN_STR, 3)||
RPAD(NVL(act.C1, ' '), 5)||
RPAD(NVL(act.C2, ' '), 5)||
RPAD(NVL(act.C3, ' '), 5)||
RPAD(NVL(act.C4, ' '), 5)
) CHAMP_STR3,
DECODE(INFO, NULL, 1, 0) CHAMP_NUM2,
CHAMP_STR4 CHAMP_STR4,
TO_CHAR(DATE_DEBUT, 'YYYYMMDDHH24MISS') date_debut_str,
DATE_DEBUT date_debut,
TO_CHAR(DATE_FIN, 'YYYYMMDDHH24MISS') date_fin_str,
DATE_FIN date_fin
FROM TABLE_ACT ACT
-- On prend les TGN des associations ou leur ascendants uniquement.
JOIN TGN TGN1 ON instr(TGN1.path, act.TGA) > 0
JOIN TGN TGN2 ON instr(TGN2.path, act.TGB) > 0
) ORDER BY CHAMP_STR1, CHAMP_FLAG, 3, CHAMP_STR3, date_debut; |
Partager