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
|
with
typeDeFichiers as
(
select 'TXT' as TypeFichier, 1 as inheritable from dual
UNION
select 'BIN' as TypeFichier, 0 as inheritable from dual
UNION
select 'ASC' as TypeFichier, 0 as inheritable from dual
UNION
select 'ZIP' as TypeFichier, 0 as inheritable from dual
),
contenuRep as
(
select 1 as IdFolder , 1 as IdFichier , 'BIN' as TypeFichier from dual
UNION
select 1 as IdFolder , 2 as IdFichier , 'ASC' as TypeFichier from dual
UNION
select 2 as IdFolder , 3 as IdFichier , 'TXT' as TypeFichier from dual
UNION
select 3 as IdFolder , 4 as IdFichier , 'BIN' as TypeFichier from dual
UNION
select 4 as IdFolder , 5 as IdFichier , 'ASC' as TypeFichier from dual
UNION
select 5 as IdFolder , 5 as IdFichier , 'ASC' as TypeFichier from dual
UNION
select 5 as IdFolder , 3 as IdFichier , 'TXT' as TypeFichier from dual
),
structureRep as
(
select 1 as IdFolder , null as IdFolderParent from dual
UNION
select 2 as IdFolder , 1 as IdFolderParent from dual
UNION
select 3 as IdFolder , 1 as IdFolderParent from dual
UNION
select 4 as IdFolder , 1 as IdFolderParent from dual
UNION
select 5 as IdFolder , null as IdFolderParent from dual
UNION
select 4 as IdFolder , 5 as IdFolderParent from dual
)
--ensemble des fichiers des répertoires fils + les fichiers éventuellement hériés des répertoires parents
SELECT DISTINCT
IdFolderFils,
NVL(fils.IdFichier,pere.IdFichier) AS IdFichier
FROM
(
SELECT
IdFolder , IdFichier , TypeFichier
FROM contenuRep
) pere
,(
SELECT IdFolder , IdFichier , TypeFichier
FROM contenuRep
) fils
,(
SELECT * FROM typeDeFichiers,
(
SELECT IdFolder IdFolderFils, IdFolderParent
from structureRep where IdFolderParent is not null
)
) repDir --liste des répertoires fils et ensemble des type de fichiers qu'ils pourraient contenir
WHERE repDir.TypeFichier = pere.TypeFichier(+)
AND repDir.TypeFichier = fils.TypeFichier(+)
AND repDir.IdFolderParent = pere.IdFolder(+)
AND repDir.IdFolderFils= fils.IdFolder(+)
-- au moins un fichier à hériter
AND (pere.IdFichier IS NOT NULL OR fils.IdFichier IS NOT NULL)
-- si le seul fichier proposé en héritage par le dossier parent est un fichier inhéritable
-- on ne le prend pas
AND NOT (pere.IdFichier IS NOT NULL AND fils.IdFichier IS NULL AND repDir.inheritable= 1)
order by 1,2; |
Partager