Oracle et les fonctions analytiques et autre fonctions à connaitre #
Les fonctions analytiques #
Je me suis rendu compte qu’elles étaient assez peu connues (bien que très pratiques) et comme j’ai trouvé un très bon tutoriel sur les fonctions du style AVG, LAG et LEAD, CORR, MAX et MIN, RATIO_TO_REPORT, STDDEV et VARIANCE, NTILE, ROW_NUMBER, RANK, DENSE_RANK et COUNT, FIRST et LAST, FIRST_VALUE et LAST_VALUE, PERCENTILE_CONT et PERCENTILE_DISC et le partitionnement (PARTITION). Lisez avec attention :
http://lalystar.developpez.com/fonctionsAnalytiques/
La concaténation de chaine de caractères #
Source #
- http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php
- http://www.oracle-developer.net/display.php?id=306
Avant la 10g #
Le plus simple était de passer par une fonction.
en 10g : COLLECT #
cela passe par trois étapes :
- Création d’un type
CREATE OR REPLACE TYPE t_varchar2_tab AS TABLE OF VARCHAR2(4000);
- Création d’une fonction
CREATE OR REPLACE FUNCTION tab_to_string (p_varchar2_tab IN t_varchar2_tab,
p_delimiter IN VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
l_string VARCHAR2(32767);
BEGIN
FOR i IN p_varchar2_tab.FIRST .. p_varchar2_tab.LAST LOOP
IF i != p_varchar2_tab.FIRST THEN
l_string := l_string || p_delimiter;
END IF;
l_string := l_string || p_varchar2_tab(i);
END LOOP;
RETURN l_string;
END tab_to_string;
/
- La requête
SELECT deptno,
tab_to_string(CAST(COLLECT(ename) AS t_varchar2_tab)) AS employees
FROM emp
GROUP BY deptno;
en 11g : LISTAGG #
SELECT deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM emp
GROUP BY deptno;
Les tables virtuelles #
http://www.oracle-developer.net/display.php?id=207
Transformer les colonnes en lignes ou le pivot #
Le problème #
https://forums.oracle.com/forums/thread.jspa?threadID=305252
En 10g #
L’extension MODEL permet de s’en sortir. Voir http://technology.amis.nl/blog/300/pivoting-in-sql-using-the-10g-model-clause.
En 11g #
Cette nouvelle version amène une nouvelle fonction de PIVOT.
Accès direct à un fichier CSV #
http://oracle.developpez.com/guide/architecture/tables/?page=Chap1#L1.5.1