Export requete oracle en CSV via la ligne de commande - SQL/NoSQL - Programmation
Marsh Posté le 26-11-2008 à 11:06:22
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
Marsh Posté le 26-11-2008 à 11:24:36
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
Marsh Posté le 26-11-2008 à 11:37:41
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.
Marsh Posté le 26-11-2008 à 12:16:08
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
Marsh Posté le 26-11-2008 à 13:17:01
vonm a écrit : Ok, j'ai regarde les options de formatage de sqlplus et j'arrive a un resultat presque ok. |
enfin une vraie question...
la réponse :
Code :
|
Marsh Posté le 26-11-2008 à 13:18:34
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
Marsh Posté le 26-11-2008 à 13:26:48
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.
Marsh Posté le 26-11-2008 à 13:47:12
couak a écrit :
|
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.
Marsh Posté le 26-11-2008 à 13:48:58
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.
Marsh Posté le 26-11-2008 à 13:50:06
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)).
Marsh Posté le 26-11-2008 à 13:51:26
Je me rends compte que je n'apporte pas assez de detail sur mon probleme.
Voici le script que j'utilise :
Code :
|
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.
Marsh Posté le 26-11-2008 à 14:06:59
"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.
Marsh Posté le 26-11-2008 à 14:08:28
couak a écrit : |
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.
Marsh Posté le 26-11-2008 à 14:25:39
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...
Marsh Posté le 26-11-2008 à 15:19:51
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.
Marsh Posté le 26-11-2008 à 15:53:54
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
Marsh Posté le 26-11-2008 à 16:04:20
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 :
|
Marsh Posté le 26-11-2008 à 17:19:00
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
Marsh Posté le 26-11-2008 à 18:31:34
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.
Marsh Posté le 27-11-2008 à 11:06:32
ReplyMarsh Posté le 11-07-2012 à 02:17:08
vonm a écrit : Ca fonctionne nickel. |
bonjour est ce que je peux avoir votre programme
Marsh Posté le 16-07-2012 à 12:25:31
sallaf a écrit : |
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.
Marsh Posté le 28-06-2013 à 12:28:47
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);
}
?>
Marsh Posté le 26-11-2008 à 10:55:40
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.