[Oracle 10G] Tableau Croisé Dynamique
Salut,
J'aimerais créer une procédure qui génère un tableau croisé dynamique. Bien entendu, je sais que c'est impossible avec une commande SQL classique.
J'ai donc écrit une procédure qui génère dynamiquement une requête SQL avec toutes mes colonnes, mais je ne sais pas comment retourner le resultat de la requête comme celui d'un select clasique.
Si dessous le code que j'utilise :
Code:
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
| declare
stmt varchar2 (2048);
abu varchar2(56);
cursor cursor_abu is
select distinct val_2
from t_slalom_outputs
where table_name='WS3_MATURITY_LEVEL_PROCESS';
begin
stmt := 'select '
|| ' decode(grouping(val_3),1,''Grand Total'',val_3) as domain, '
|| ' decode(grouping(val_4),1,''-'',val_4)as process';
open cursor_abu;
loop
fetch cursor_abu into abu;
exit when cursor_abu%notfound;
stmt := stmt || ' ,round(sum(decode(val_2,''' ||abu || ''',val_5,0))/sum(decode(val_2,''' ||abu || ''',1,0)),2) as "' ||abu ||'" ';
end loop;
close cursor_abu;
stmt := stmt || 'from '
|| 't_slalom_outputs '
|| 'where '
|| 'table_name=''WS3_MATURITY_LEVEL_PROCESS'' '
|| 'group by rollup (val_3,val_4) '
|| 'order by 1 asc, 2 asc';
execute immediate stmt;
end; |
Pour info, je fait ça pour intégrer le résultat dans un système de reporting extrêmement archaïque qui ne sais pas générer automatiquement des tableaux croisés (eh oui, ça existe encore).
Dans mon système, la seul chose que je peux lui donner est une requête SQL, donc si je peux lui renvoyer le résultat de la requête dans ma procédure, ce serait l'idéal.
PS. Non, je ne peux pas créer une fonction qui génère la requête et la donner à mon logiciel (il est archaïque, et mon client n'est pas prête à le changer)