Copyright Oracle Corporation, Tous droits réservés. 11 Extraction Hiérarchique
11-2 Copyright Oracle Corporation, Tous droits réservés. Objectifs A la fin de ce chapitre, vous saurez : Décrire le concept d'une requête hiérarchique Créer un état sous forme d'arbre Mettre en forme des données hiérarchiques Exclure des branches de la structure arborescente A la fin de ce chapitre, vous saurez : Décrire le concept d'une requête hiérarchique Créer un état sous forme d'arbre Mettre en forme des données hiérarchiques Exclure des branches de la structure arborescente
11-3 Copyright Oracle Corporation, Tous droits réservés. Quand est-il Possible d'Utiliser une Requête Hiérarchique ? EMPNO ENAME JOB MGR KING PRESIDENT 7698 BLAKE MANAGER CLARK MANAGER JONES MANAGER MARTIN SALESMAN ALLEN SALESMAN TURNER SALESMAN JAMES CLERK WARD SALESMAN FORD ANALYST SMITH CLERK SCOTT ANALYST ADAMS CLERK MILLER CLERK 7782 EMPNO ENAME JOB MGR KING PRESIDENT 7698 BLAKE MANAGER CLARK MANAGER JONES MANAGER MARTIN SALESMAN ALLEN SALESMAN TURNER SALESMAN JAMES CLERK WARD SALESMAN FORD ANALYST SMITH CLERK SCOTT ANALYST ADAMS CLERK MILLER CLERK 7782
11-4 Copyright Oracle Corporation, Tous droits réservés. Structure Arborescente JONESBLAKE SCOTTFORD KING ALLENWARDMARTINTURNERJAMES ADAMSSMITH EMPNO = 7839 MGR = 7839 MILLER CLARK
11-5 Copyright Oracle Corporation, Tous droits réservés. Syntaxe Hiérarchique expr comparison_operator expr SELECT[LEVEL], column, expr... FROM table [WHERE condition(s)] [START WITH condition(s)] [CONNECT BY PRIOR condition(s)]; condition:
11-6 Copyright Oracle Corporation, Tous droits réservés. Parcours de l'Arbre DIRECTION DU HAUT VERS LE BAS Column1 = CLE PARENT Column2 = CLE ENFANT DU BAS VERS LE HAUT Column1 = CLE ENFANT Column2 = CLE PARENT Parcours du haut vers le bas sur la table EMP. CONNECT BY PRIOR column1 = column2... CONNECT BY PRIOR empno = mgr
11-7 Copyright Oracle Corporation, Tous droits réservés. Parcours de l'Arbre POINT DE DEPART Indique la condition à remplir Accepte tous les prédicats valides Sur la table EMP, commencer par l’employé Blake. Indique la condition à remplir Accepte tous les prédicats valides Sur la table EMP, commencer par l’employé Blake.... START WITH ename = ‘BLAKE’ START WITH column1 = value
11-8 Copyright Oracle Corporation, Tous droits réservés. Parcours de l'Arbre EMPNO ENAME JOB MGR BLAKE MANAGER KING PRESIDENT EMPNO ENAME JOB MGR BLAKE MANAGER KING PRESIDENT SQL> SELECT empno, ename, job, mgr 2 FROM emp 3 CONNECT BY PRIOR mgr = empno 4 START WITH empno = 7698;
11-9 Copyright Oracle Corporation, Tous droits réservés. Parcours de l'Arbre Walk KING reports to BLAKE reports to KING MARTIN reports to BLAKE ALLEN reports to BLAKE TURNER reports to BLAKE JAMES reports to BLAKE rows selected. Walk KING reports to BLAKE reports to KING MARTIN reports to BLAKE ALLEN reports to BLAKE TURNER reports to BLAKE JAMES reports to BLAKE rows selected. SQL> SELECT ename||' reports to '||PRIOR ename "Walk" 2 FROM emp 3 CONNECT BY PRIOR empno = mgr 4 START WITH ename = 'KING'; SQL> SELECT ename||' reports to '||PRIOR ename "Walk" 2 FROM emp 3 CONNECT BY PRIOR empno = mgr 4 START WITH ename = 'KING';
11-10 Copyright Oracle Corporation, Tous droits réservés. Classement des Lignes avec la Pseudocolonne LEVEL Niveau 1 racine/parent BLAKE KING ALLEN WARDMARTINTURNERJAMES CLARK MILLER JONES SCOTT FORD ADAMSSMITH Niveau 2 parent/enfant Niveau 3 parent/enfant /feuille Niveau 4 feuille
11-11 Copyright Oracle Corporation, Tous droits réservés. Créer un rapport affichant les niveaux hiérarchiques de la société en commençant par le plus haut, marquer chaque niveau suivant par une indentation jusqu'au niveau le plus bas. Formatage des Etats Hiérarchiques avec LEVEL et LPAD Créer un rapport affichant les niveaux hiérarchiques de la société en commençant par le plus haut, marquer chaque niveau suivant par une indentation jusqu'au niveau le plus bas. SQL> COLUMN org_chart FORMAT A15 SQL> SELECT LPAD(' ', 3 * LEVEL-3)||ename org_chart, 2 LEVEL, empno, mgr, deptno 3 FROM emp 4 CONNECT BY PRIOR empno = mgr 5 START WITH mgr is NULL;
11-12 Copyright Oracle Corporation, Tous droits réservés. Elagage des Branches Utilisez la clause WHERE pour éliminer un noeud individuel. Utilisez la clause CONNECT BY pour éliminer une branche. WHERE ename != ‘SCOTT’ CONNECT BY PRIOR empno = mgr AND ename != ‘SCOTT’ JONES SCOTTFORD ADAMSSMITH JONES SCOTTFORD ADAMSSMITH
11-13 Copyright Oracle Corporation, Tous droits réservés. Tri des Données SQL>BREAK ON deptno SQL>SELECT LEVEL,deptno,empno,ename,job,sal 2 FROM emp 3 CONNECT BY PRIOR empno = mgr 4 START WITH mgr is NULL 5 ORDER BY deptno; SQL>BREAK ON deptno SQL>SELECT LEVEL,deptno,empno,ename,job,sal 2 FROM emp 3 CONNECT BY PRIOR empno = mgr 4 START WITH mgr is NULL 5 ORDER BY deptno; Créez un état hiérarchique trié par numéro de département
11-14 Copyright Oracle Corporation, Tous droits réservés. RESUME Les requêtes hiérarchiques permettent d'afficher une relation hiérarchique existant entre des lignes d'une table. Il est possible de déterminer la direction et le point de départ du parcours. L'élagage permet d'éliminer des noeuds ou des branches. Les requêtes hiérarchiques permettent d'afficher une relation hiérarchique existant entre des lignes d'une table. Il est possible de déterminer la direction et le point de départ du parcours. L'élagage permet d'éliminer des noeuds ou des branches.
11-15 Copyright Oracle Corporation, Tous droits réservés. Présentation des Exercices Différence entre les requêtes hiérarchiques et les requêtes non hiérarchiques Parcours d'un arbre Création d'un état indenté à l'aide de la pseudocolonne LEVEL Elagage de la structure arborescente Tri des résultats
11-16 Copyright Oracle Corporation, Tous droits réservés.
11-17 Copyright Oracle Corporation, Tous droits réservés.
11-18 Copyright Oracle Corporation, Tous droits réservés.