Bonjour
je voudrai savoir comment on fait pour exporter le résultat d'une procédure en Excel.
Merci
Version imprimable
Bonjour
je voudrai savoir comment on fait pour exporter le résultat d'une procédure en Excel.
Merci
Bonjour,
plusieurs solutions possibles mais la plus simple est de créer un fichier texte avec une extension .csv (avec séparateur ;). Ainsi vous pourrez ouvrir le fichier dans MS excel. Soit il s'ouvrira directement bien soit il faudra utiliser le menu Données\Convertir.
Pour créer le fichier il faut utiliser le package UTL_FILE et créer le fichier directement sur le serveur de BDD.
UTL_FILE ne permet pas de créer un fichier sur un poste client.
Par contre on peut
- envoyer le fichier par mail au destinataire en utilisant une procédure PL/SQL,
- ou faire un batch qui lance la procédure PL/SQL puis qui copie le fichier crée au bon endroit pour qu'il soit accessible au destinataire.
Sinon, on peut créer des packages pour faire des fichier de type XML MS Excel pour créer des fichiers .xls directement lisibles et formatés. Tout dépend du besoin..
Bon courage
Hello
Effectivement il peut y avoir plusieurs solutions. Si le résultat de la procédure est issu d'une simple requête SELECT, alors il existe une solution très basique et vite faite, qui consiste à mettre au début du fichier de script:
Puis faire un SPOOL sur le résultat du script. Le résultat sera donc un fichier CSV avec Pipe comme séparateur qu'on peut ouvrir avec Excel sans problème. Bien évidemment, cela ne marche qu'avec SQL*Plus et pour les autres cas effectivement la solution de Zephir44 est la classe! :ccool:Code:SET COLSEP '|';
Voire la note MOS n° 436390.1
Bonjour,
ci-dessous un exemple de PL/SQL permettant de créer un fichier .csv
J'espère que cela vous aidera
Bon courage et bonne journéeCode:
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 DECLARE Nomfic varchar2(60); Fic UTL_FILE.FILE_TYPE; NB PLS_INTEGER := 0; CURSOR C_TEST is select nom, prenom, adresse, cp, ville from emp; BEGIN --on compte le nbre d'enregistrement dans le curseur pour savoir s'il est non vide --On doit pouvoir faire un autre test pour le même résultat For J in C_TEST loop NB := NB + 1; end loop; --S'il est non vide on écrit dans le fichier IF NB > 0 THEN --Définition du nom et ouverture du fichier Nomfic := 'liste_' || to_char(sysdate,'DDMMYYYY-HH24MISS') || '.csv'; Fic:=UTL_FILE.FOPEN('DIRECTORY',Nomfic,'w'); For J in C_TEST loop UTL_FILE.PUT_LINE(Fic, J.nom || ';' || J.prenom || ';' || J.adresse || ';' || J.cp || ';' || J.ville); END LOOP; --fermeture du fichier UTL_FILE.FCLOSE(Fic); END IF; END;
Je trouve qu'en général il vaut mieux utiliser pipe '|' comme délimiteur au lieu de séparateur classique des fichiers CSV c'est à dire ";".
Personnellement à plusieurs reprises j'avais des tables dont le contenu des colonnes contenait le caractère ";".
Mais bon, le choix de délimiteur est aussi une question de goût :ccool: