Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Import/Export
Import/Export Forum d'entraide sur les outils d'import/export Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2011, 08h05   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 17
Points : 1
Points : 1
Par défaut Génération fichier .csv via une requête SQL

Bonjour à tous,

Je débute sous Oracle, je dois écrire un script qui sera lancé quotidiennement par un ordonnanceur, il contiendra des requêtes SQL qui s'exécuteront sur une base Oracle, le résultat de chaque requête devra être exporté vers un fichier .csv (1 requête = 1 fichier .csv) qui sera importé par la suite par une application.

je dispose déjà des requêtes SQL, questions :

1) Est-il possible de se connecter à une base Oracle en ligne de commande via sqlplus ?

2) Existe-t-il une commande d'export vers un fichier .csv sous Oracle ?

Merci pour votre aide.

Cordialement
matnys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 09h41   #2
Membre habitué
 
Homme Gaëtan
Développeur Oracle
Inscription : mai 2006
Messages : 117
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations professionnelles :
Activité : Développeur Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 117
Points : 115
Points : 115
Bonjour,

Oui tu peux utiliser directement Sqlplus pour te connecter à la base oracle. En ce qui concerne l'export en csv, je n'ai pas à ma connaissance une commande qui peut te faire ça simplement. Il y a des outils ( notament Jdevelopper/Sqldevelopper) qui peuvent le faire.

Sinon tu peux lancer l'export directement via sqlplus

Code :
1
2
3
4
5
6
 
connexion via Sqlplus puis
SET pagesize 0
spool export.csv
SELECT Col1||','||col2 FROM ma_table;
spool off
attila771 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/12/2011, 14h33   #3
Membre du Club
 
Homme Arnaud
Inscription : octobre 2002
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2002
Messages : 56
Points : 66
Points : 66
Bonjour,

Je me permets de compléter la réponse de attila771:

Pour se connecter a une base avec sqlplus, il faut utiliser une commande du type:

Code :
1
2
3
4
5
$> sqlplus user/mdp@TNS
ou
$> sqlplus user/mdp@serveur:port/SID
ou
$> sqlplus user/mdp@serveur:port/service_name
(par ailleurs, s'il n'était pas possible de se connecter a Oracle avec sqlplus, je ne vois pas trop à quoi servirait l'outil )

Pour l'export en CSV, les méthodes décrites par attila771 fonctionnent très bien.

Par contre, pour le spool, je te conseille de regarder les commandes suivantes également:

Code :
1
2
3
4
5
SET TRIMSPOOL ON (Histoire de ne pas avoir moult espaces inutiles dans le fichier généré, ce qui augmente sa taille)
SET LINESIZE n (spécifier le "n")
SET HEAD OFF (au besoin)
SET FEEDBACK OFF (au besoin)
SET VERIFY OFF (au besoin)
sqlplus dispose de beaucoup de commandes "SET" très utiles pour formater la sortie comme tu le souhaite, et la documentation sur le sujet ne manque pas
__________________
Tuning and optimization are not a fix to a bad design. A good design is a fix to a bad design.
Dajon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/12/2011, 22h43   #4
Membre actif
 
Inscription : février 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 167
Points : 161
Points : 161
Par défaut Et pour le coté batch...

Bonjour,

Encore un petit dernier pour la route :
depuis la ligne de commande

Code :
1
2
 
sqlplus -s -l user/mdp@TNS @mon_fichier_sql.sql
-l pour le cas ou la connexion échoue
-s pour éviter l'affichage de labannire sqlplus

et dans mon_fichier_sql.sql
Code :
1
2
3
4
5
6
7
8
9
10
 
-- Gestion des sortie en cas d'erreur
whenever sqlerror exit sqlcode
whenever oserror exit 1
 
SET termout off
 
-- La requete de attila771
 
exit;
termout off pour éviter que tout le contenu n'apparaisse à l'écran ce qui pénalise pas mal.

Pozzo
Pozzo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/12/2011, 23h01   #5
Rédacteur
 
Inscription : décembre 2002
Messages : 2 389
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 389
Points : 3 276
Points : 3 276
Le SET COLSEP est fort utile pour générer un .CSV, puisqu'il permet de choisir le séparateur de colonnes, et donc un point-virgule si on le souhaite.

Ainsi, en mettant ce qui suit dans "c:\temp\script.sql :
Code :
1
2
3
4
5
6
7
8
9
10
SET colsep ";"
SET trimspool ON
SET heading off
SET echo off
SET feedback off
SET pagesize 0
 
spool c:\temp\resu.csv
SELECT * FROM scott.emp;
spool off
Puis en appelant ce script
On obtient un fichier CSV parfaitement valable, sans avoir eu besoin de concaténer explicitement les différentes colonnes.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/12/2011, 22h03   #6
Invité de passage
 
Inscription : juillet 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 17
Points : 1
Points : 1
Par défaut Merci

Merci à tous pour votre aide
matnys est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h11.


 
 
 
 
Partenaires

Hébergement Web