Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
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 02/11/2006, 13h20   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 6
Points : 2
Points : 2
Par défaut [Sqlplus] Format de sortie

Bonjour
Je suis sous SQLPlus.
Je souhaiterai interroger une BD avec un script et obtenir en sortie un fichier avec des ligne de format :
Code :
"val1","val2","val3",NULL,"val5"
Voici mon script :
Code :
1
2
3
4
5
6
7
spool toto.lst
SET pagesize 0
SET linesize 200
SET heading off
SET echo off
SELECT '"'||COL1||'","'||COL2||'","'||COL3||'"' FROM MA_TABLE;
spool off
Les problèmes que je rencontre :
- lorsque la valeur vaut NULL, sur la sortie j'ai un vide et je souhaiterai qu'il y a NULL affiché, comment faire ??
- dans la requête que j'ai faite, toutes les valeurs sont entre guillemets et le problème est que je ne veux pas que la valeur NULL soit entre guillemets.
Merci de m'aider
cheung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 14h52   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Essayez :
Code :
1
2
3
4
...
SELECT '"'||NVL(COL1, 'NULL')||'","'||NVL(COL2, 'NULL')||'","'||NVL(COL3, 'NULL')||'"'
FROM MA_TABLE;
...
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 15h44   #3
Invité de passage
 
Inscription : novembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 6
Points : 2
Points : 2
Ca marche nikel pour la valeur NULL.
Mais je souhaiterai avoir la valeur entre guillemets si celle ci est différente de NULL (je sais, je suis chiant ).

Exemple :
Dans la requête que tu viens de me citer, on a un résultat du type Je m'explique :
- Si val3 vaut toto, on a - Si val3 vaut NULL, on a Et moi je souhaiterai :
- Si val3 vaut toto, on a - Si val3 vaut NULL, on a
cheung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 16h51   #4
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Tout simplement :
Code :
1
2
SELECT NVL('"' || COL1 || '"', 'NULL'), ...
FROM MA_TABLE
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 17h29   #5
Invité de passage
 
Inscription : novembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 6
Points : 2
Points : 2
J'ai testé ta commande mais elle n'a pas l'air de passer sous sqlplus. J'ai trouvé ca vraiment étonnant

On m'a indiqué une autre solution. Je l'ai testé et ca marche. Je pense que c'est celle ci que je vais adopter :
Code :
SELECT DECODE(COL1,NULL,'NULL','"'||COL1||'"') ||','|| DECODE(COL2,NULL,'NULL','"'|| COL2 ||'"') FROM MA_TABLE;
Voili voilou.
En tout cas, merci beaucoup Magnus !!
cheung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 18h01   #6
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Effectivement, j'ai adapté mon code un peu vite : si COL1 IS NULL est vrai alors '"' || COL1 || '"' vaut '""' et donc n'est pas NULL.
Il faut en effet utiliser DECODE.
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 18h06   #7
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Juste pour info, pour ce genre de problèmatique il y a la fonction nvl2 qui est particulièrement indiquée :
Code :
SELECT nvl2(col1, '"' || col1 || '"', 'null') FROM maTable;
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 09h28   #8
Invité de passage
 
Inscription : novembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 6
Points : 2
Points : 2
Je viens de tester le NVL2 et ca marche nikel aussi. Il y a donc 2 solutions
Merci a tous !!!
cheung 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 23h05.


 
 
 
 
Partenaires

Hébergement Web