Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2947 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Export requete oracle en CSV via la ligne de commande

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Export requete oracle en CSV via la ligne de commande

n°1816882
vonm
Posté le 26-11-2008 à 10:55:40  profilanswer
 

Bonjour,
 
Je dispose de requetes sql sour oracle que je souhaiterais executer automatiquement de nuit afin de generer un fichier csv du resultat.
 
Apres quelques recherches sur le net, je n'ai pas trouve de methode simple pour faire cela.
 
Actuellement j'arrive a generer un fichier via sqlplus mais le resultat n'est pas en csv et je ne sais pas comment le modifier.
 
Je suppose qu'il existe des outils standards pour faire ca mais je ne trouve rien de rien.
 
Si vous en connaissez un interessant.
 
Merci d'avance
 
v.

mood
Publicité
Posté le 26-11-2008 à 10:55:40  profilanswer
 

n°1816890
couak
Posté le 26-11-2008 à 11:06:22  profilanswer
 

c'est quoi une méthode simple pour toi ?
En sqlplus tu peux le faire en jouant avec les options de formattage ("set head", "set linesize", etc.)
Tu peux également le faire en PL/SQL et en utilisant UTL_FILE (inconvénient : il faut déclarer les répertoires autorisés dans le fichier init)
Moi perso je préfère le faire avec des langages plus évolués style Perl

n°1816899
vonm
Posté le 26-11-2008 à 11:24:36  profilanswer
 

ben le probleme est la.
J'aurais aime avoir un petit soft qui fasse ca tout seul :
- on lui passe les infos de connexion
- on lui passe la requete
- il genere un fichier csv
 
le tout via un fichier de parametrage ou la ligne de commande.
 
Si ca n'existe pas, je vais le faire, ca m'embetait juste de reinventer la roue.
 
Par contre, je ne connais pas les options de formatage de sqlplus. Je vais donc creuser dans ce sens.
 
Merci pour l'info

n°1816904
vonm
Posté le 26-11-2008 à 11:37:41  profilanswer
 

Ok, j'ai regarde les options de formatage de sqlplus et j'arrive a un resultat presque ok.
Sauriez-vous comment on peut supprimer la ligne de '------------' entre le nom des colonnes et les donnees tout en gardant le nom des colonnes affiche ?
 
Merci d'avance
 
v.

n°1816939
casimimir
Posté le 26-11-2008 à 12:16:08  profilanswer
 

j'ai fais un truc en java pour un collègue qui avait besoin de ca, mp moi ton mail et je te l'envoie

n°1816961
couak
Posté le 26-11-2008 à 13:17:01  profilanswer
 

vonm a écrit :

Ok, j'ai regarde les options de formatage de sqlplus et j'arrive a un resultat presque ok.
Sauriez-vous comment on peut supprimer la ligne de '------------' entre le nom des colonnes et les donnees tout en gardant le nom des colonnes affiche ?
 
Merci d'avance
 
v.


enfin une vraie question...
la réponse :

Code :
  1. set pagesize 0

n°1816963
couak
Posté le 26-11-2008 à 13:18:34  profilanswer
 

casimimir a écrit :

j'ai fais un truc en java pour un collègue qui avait besoin de ca, mp moi ton mail et je te l'envoie


c'est un peu lourd pour si peu de choses :/
ca se fait en qques lignes sous sqlplus ou pl/sql

n°1816967
olivthill
Posté le 26-11-2008 à 13:26:48  profilanswer
 

Je confirme que cela se fait couramment avec sqlplus. Mais comme ça s'apprend rarement dans les écoles d'informatique, je vois beaucoup de jeunes informaticiens qui sont un peu perplexes, alors que c'est assez simple une fois que l'on connait les commandes pour ne pas avoir les lignes non désirées de sqlplus. Voir la doc de sqlplus.

n°1816991
vonm
Posté le 26-11-2008 à 13:47:12  profilanswer
 

couak a écrit :


enfin une vraie question...
la réponse :

Code :
  1. set pagesize 0



 
certes, mais je me permets de la reposer car ta reponse semble ne pas fonctionner :
 
Sauriez-vous comment on peut supprimer la ligne de '------------' entre le nom des colonnes et les donnees tout en gardant le nom des colonnes affiche ?  
 
merci
 
v.

n°1816997
vonm
Posté le 26-11-2008 à 13:48:58  profilanswer
 

olivthill a écrit :

Je confirme que cela se fait couramment avec sqlplus. Mais comme ça s'apprend rarement dans les écoles d'informatique, je vois beaucoup de jeunes informaticiens qui sont un peu perplexes, alors que c'est assez simple une fois que l'on connait les commandes pour ne pas avoir les lignes non désirées de sqlplus. Voir la doc de sqlplus.


 
Merci beaucoup pour le "jeunes informaticien", mais tu sais je ne suis plus tout frais !!!  :)  
 
Personnellement, j'ai un vrai probleme avec Oracle que je n'utilise que tres rarement et qui me parait d'un abord terriblement complexe.
 
Et sur ce point la doc de sqlplus (que j'ai lu avant de poster ici) ne m'aide que bien peu.
 
v.

mood
Publicité
Posté le 26-11-2008 à 13:48:58  profilanswer
 

n°1816998
olivthill
Posté le 26-11-2008 à 13:50:06  profilanswer
 

SET HEADING OFF
 
(et il y a d'autres options intéressantes, voir la doc (ne jamais oublier que Google est ton ami, alors qu'il n'y a que des grincheux sur les forums)).

n°1817001
vonm
Posté le 26-11-2008 à 13:51:26  profilanswer
 

Je me rends compte que je n'apporte pas assez de detail sur mon probleme.
 
Voici le script que j'utilise :

Code :
  1. SET echo off
  2. SET termout off
  3. SET feedback off
  4. SET head ON
  5. SET pages 50000
  6. SET LINES 5000
  7. SET pagesize 50000
  8. SET pause off
  9. SET colsep ';'
  10. Spool C:\fichier.csv
  11. SELECT * from t_client where nom = 'TOTO';
  12. spool off
  13. exit


 
Je souhaiterais obtenir un fichier csv tout ce qu'il y a de plus classique :
NOM;PRENOM;ADRESSE...
TOTO;Tutu;25 rue des mesanges...
 
Merci d'avance pour toute l'aide que vous voudrez bien m'apporter.
 
v.
 
PS: set heading off masque le nom des champs. Moi je les veux mais sans les --------- qui me polluent l'affichage.


Message édité par vonm le 26-11-2008 à 13:53:48
n°1817018
olivthill
Posté le 26-11-2008 à 14:06:59  profilanswer
 

"SET pages 50000" et "SET pagesize 50000" sont identiques car sqlplus accepte un racourcisement du nom de l'option quand il n'y a pas d'ambiguité possible.
Les tirets sont présents à cause de la ligne "SET head ON". Il faudrait mettre "SET Heading OFF" à la place.
Edit : On ne peut pas enlever uniquement les tirets. Pour y remédier on peut les enlever à la fin avec un grep -v ou bien les ajouter avec cat sous Unix.


Message édité par olivthill le 26-11-2008 à 14:10:04
n°1817020
casimimir
Posté le 26-11-2008 à 14:08:28  profilanswer
 

couak a écrit :


c'est un peu lourd pour si peu de choses :/
ca se fait en qques lignes sous sqlplus ou pl/sql


 
un peu lourd? faut un peu évaluer ce qu'on appelle lourd -> entre installer un oracle client lourd a crever et une jvm installée maintenant sur tous les systèmes tu choisis quoi?
 
he oui parceque installer sqlplus cela veut dire installer l'oracle client et si c'est juste pour rapatrier des données franchement on a plus la même notion de lourd.
la mon .jar fait 7kb + 2mo de lib( opencsv et le jdbc oracle).
 
j'utilise sqlplus pour pleins de trucs, mais pour un extract de donnée pil/poil dans le format nécessaire + qques opérations annexes c'est du bidouillage et des rustines dans tous les sens.

n°1817046
couak
Posté le 26-11-2008 à 14:25:39  profilanswer
 

lourd dans le sens utiliser java pour faire du scripting, après c'es le mode, c'est le langage du futur, etc. oui sûrement mais c'est surtout un langage pour faire du gros développement et moins bien adapté que d'autres boîte à outils comme perl ou les outils natifs
 
le client oracle est installé par défaut sur le serveur, donc je ne vois pas où est le soucis si le batch doit tourner toutes les nuits... j'installerais le script naturellement sur le serveur oracle
 
sous unix, perl est très souvent présent avec ce qu'il faut, un coup de DBD + le client léger et ca roule
 
sous windows, perl est installé par défaut avec une install serveur d'oracle, avec toutes les libs
 
donc oui je trouve ca lourd, perso je préfère pondre 20 lignes de pl/sql ou 20 lignes de perl car je sais que ce sont des outils qui sont plus souvent présent que le java, bien que ca soit de moins en moins vrai... la preuve oracle intègre une JVM embarqué et il est possible de faire des batches en java...

n°1817111
casimimir
Posté le 26-11-2008 à 15:19:51  profilanswer
 

c'est optimiste de penser qu'on a tout le temps accès au serveur.
 
après que ce soit du perl ou du java ou du cobol ça n'a pas d'importance, c'est juste que ne pas passer par une install du client oracle ça me parait pas débile pour juste rapatrier qques données.

n°1817124
couak
Posté le 26-11-2008 à 15:53:54  profilanswer
 

je te retourne la question : il te parlait de sqlplus donc ca voulait dire qu'il avait déjà le client, alors ne pas passer par une install d'un JRE pour rapatrier qques données ca me parait pas débile :)

n°1817134
couak
Posté le 26-11-2008 à 16:04:20  profilanswer
 

pour revenir au problème :
si le paramètre UTL_FILE a été activé (mais j'en doute) tu peux faire un bout de code en pl/sql :

Code :
  1. BEGIN
  2. DECLARE
  3.   OutputFile UTL_FILE.FILE_TYPE;
  4.   CURSOR C_maTable IS
  5.   SELECT * FROM maTable ;
  6.   BEGIN
  7.     OutputFile := UTL_FILE.FOPEN('C:\Temp','output.csv','w');
  8.     FOR CurIn IN C_maTable
  9.       UTL_FILE.PUT_LINE(OutputFile,
  10.         CurIn.champ1 || ';' ||
  11. CurIn.champ2 || ';'
  12.       );
  13.     END LOOP;
  14.     UTL_FILE.FCLOSE(OutputFile);
  15.     EXCEPTION WHEN utl_file.invalid_path THEN
  16.       RAISE_APPLICATION_ERROR(-20000, 'Erreur lors de l''écriture du fichier');
  17.   END;
  18. END;
  19. /

n°1817194
casimimir
Posté le 26-11-2008 à 17:19:00  profilanswer
 

c'est vrai :)
 
enfin la c'est juste aussi que j'avais un .jar qui fait tiptop tout pret qui faisait tiptop ce qu'il voulait, un .sql, un fichier de connexion et zou

n°1817252
vonm
Posté le 26-11-2008 à 18:31:34  profilanswer
 

exact et je t'en remercie !
 
A ce sujet, je n'arrive pas a le faire tourner car il manque une librairie.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
        at application.GenerateCsvFromSql.<clinit>(GenerateCsvFromSql.java:24)
 
Il faut que je rajoute le jar de Log4j dans un classpath quelconque ???
 
v.

n°1817474
casimimir
Posté le 27-11-2008 à 10:40:31  profilanswer
 

sorry, j'aurai du t'envoyer les libs je le fais now

n°1817496
vonm
Posté le 27-11-2008 à 11:06:32  profilanswer
 

Ca fonctionne nickel.
 
Merci beaucoup
 
v.

n°2148965
sallaf
Posté le 11-07-2012 à 02:17:08  profilanswer
 

vonm a écrit :

Ca fonctionne nickel.
 
Merci beaucoup
 
v.


bonjour est ce que je peux avoir votre programme  :??:

n°2149472
vonm
Posté le 16-07-2012 à 12:25:31  profilanswer
 

sallaf a écrit :


bonjour est ce que je peux avoir votre programme  :??:


 
houlaaaa...
Desole mais franchement, je n'ai plus rien sous la main.
 
Si tu demandes en mp a casimimir il a peut etre encore ca sous la main.
 
v.

n°2195806
22758542
Posté le 28-06-2013 à 12:26:49  profilanswer
 

. "<br />\n"

n°2195807
22758542
Posté le 28-06-2013 à 12:28:47  profilanswer
 

Bonjour,  
 
 
Je cherche à manipuler le contenu d'un fichier csv dans un tableau.  
J'utilise pour cela la fonciton fgetcsv(fichier, taille, separateur) qui me  
renvoie tout le fichier ligne par ligne (avec un while).  
 
Je voudrais pouvoir manipuler ce tableau par ligne et par colonnes. J'arrive  
facilement à isloer une colonne, mais comment faire pour isloer une ligne ?  
bref on utulisant script (php) pour vider tout les ligne d'une colone choisie ?aidez -moi stp.;.;.;voila le code source qui j'utulise pour manipuler le contenu du fichier dans un tableau:  
 
 
<?php  
 
$row = 1;  
if (($handle = fopen("fichier.csv", "r" )) !== FALSE) {  
 
echo '<center> <table border="1" > ';  
 
while (($data = fgetcsv($handle, 1000, "," )) !== FALSE) {  
$num = count($data);  
if ($row == 1) {  
 
echo '<thead align="center" ><tr>';  
}else{  
echo '<tr>';  
}  
 
for ($c=0; $c < $num; $c++) {  
//echo $data[$c] . "<br />\n";  
if(empty($data[$c])) {  
 
 
 
 
$value = " ";  
}else{  
$value = $data[$c];  
}  
if ($row == 1) {  
echo '<th>'.$value.'</th>';  
}else{  
echo '<td>'.$value.'</td>';  
}  
}  
 
if ($row ==1) {  
echo '</tr></thead><tbody>';  
}else{  
echo '</tr>';  
}  
$row++;  
}  
 
echo '</tbody></table></center>';  
fclose($handle);  
}  
?>

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Export requete oracle en CSV via la ligne de commande

 

Sujets relatifs
[SQL]Erreur que je ne parviens pas à trouver dans une requête?!Rajout auto de caractères en fin de ligne d'un txt
[Livre] pour bien commencer avec ORACLEProblème Requete
Pbl de requete simpleprobleme avec la commande make
[Php/Mysql]Effacer ligne d'un tableau de donnéesexemple syntaxe dictionnaire des données oracle
Ajouter une ligne à un tableau en javascriptSupprimer une ligne d'un tableau en javascript
Plus de sujets relatifs à : Export requete oracle en CSV via la ligne de commande


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR