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