Précédent   Forum du club des développeurs et IT Pro > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/10/2011, 16h46   #1
pierre arnaud
Nouveau Membre du Club
 
Homme
Développeur décisionnel
Inscription : juillet 2002
Messages : 61
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur décisionnel

Informations forums :
Inscription : juillet 2002
Messages : 61
Points : 26
Points : 26
Par défaut Export table sybase dans csv

Bonjour,

J'ai besoin de faire un export d'une requête Sybase dans un fichier csv.

Avec ASE, j'ai testé la commande OUTPUT:
Code :
1
2
3
4
5
6
7
8
9
 
SELECT 
convert(varchar(23),convert(varchar, ARTICLE.DATE,101)+' '+convert(varchar,ARTICLE.DATE,108)+':'+convert(char(3),DATEPART(ms,ARTICLE.DATE))), 
ARTICLE.NA,
FROM
 ARTICLE
go
OUTPUT TO 'C:\temp\article.csv' FORMAT ASCII DELIMITED BY ';' QUOTE OFF
go
J'ai un message d'erreur
Citation:
"incorrect syntax near OUTPUT"
Comment dois je procéder ? avez vous d'autre possibilité ?
Merci !!
pierre arnaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 17h16   #2
mpeppler
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Âge : 53

Informations forums :
Inscription : janvier 2006
Messages : 1 307
Points : 1 643
Points : 1 643
Envoyer un message via AIM à mpeppler
Je ne connais pas la commande "OUTPUT" (en tout cas pour ASE).

Pour faire un CSV il faut formatter les data "à la main" - les outils Sybase fournis ne le font pas automatiquement, à moins d'avoir un outil qui le fait déjà (e.g. SQLBrowser le fait - www.sqlbrowser.com).

Le faire à la main donne qqch du genre

Code :
1
2
 
SELECT '"' + c1 + '"' + ',' + .... FROM TABLE ....
On peut aussi utiliser un script perl, ou php, ou.... ce qui est plus facile d'usage...

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 17h22   #3
Jean.Cri1
Membre éclairé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 210
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 210
Points : 363
Points : 363
J'utiliserais bcp avec l'option -c ( mode charactere ) et -t; pour spécifier le delimiteur de champs.
Eventuellement il faudra echapper la valeur de ; avec \ ou en l'entourant de "".
Il faut pour cela que les données soient definies dans une table 'en dur' ou par une vue qui les définie
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 16h52   #4
pierre arnaud
Nouveau Membre du Club
 
Homme
Développeur décisionnel
Inscription : juillet 2002
Messages : 61
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur décisionnel

Informations forums :
Inscription : juillet 2002
Messages : 61
Points : 26
Points : 26
J'ai effectivement testé avec les délimiteurs dans la requête. Cela fonctionne "presque" correctement.
Au delà du 6eme champ, il ajoute un saut de ligne....

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
FUNCTION main
{
	isql -Usa -P -S<<nom du serveur>> -D<<nom de la base>> -b -o test_temp.csv << EOF
	SELECT  ARTICLE.POS_DT,";",
	ARTICLE.DATE_POS,";",
	ARTICLE.SECTION,";",
	ARTICLE.URG,";",
	ARTICLE.VISA,";",
	ARTICLE.SOUS_POS,";",
	ARTICLE.REQUAL_FONC,";"
	FROM ARTICLE WHERE NDT = 8
 
go
EOF
 
sed "s/^ *//;s/ *$//;s/ \{1,\}//g" <test_temp.csv> test.csv
rm -f test_temp.csv
 
}
 
main "$@"
Comment puis-je éviter ce saut de ligne ?

Merci
pierre arnaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 17h43   #5
mpeppler
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Âge : 53

Informations forums :
Inscription : janvier 2006
Messages : 1 307
Points : 1 643
Points : 1 643
Envoyer un message via AIM à mpeppler
Utiliser l'option -w de isql (-w 1024 p.ex.).

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 08h39   #6
pierre arnaud
Nouveau Membre du Club
 
Homme
Développeur décisionnel
Inscription : juillet 2002
Messages : 61
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur décisionnel

Informations forums :
Inscription : juillet 2002
Messages : 61
Points : 26
Points : 26
Merci Michael, c'est parfait.
Reste un petit détail, à la fin de mon fichier, il me remonte

(6rowsaffected)

Est ce que j'ai la possibilité de supprimer ce message ?

Il faudrait également remplacer si cela est possible la valeur NULL remontée par rien

;NULL; > ;;

Merci
pierre arnaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 09h40   #7
mpeppler
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Âge : 53

Informations forums :
Inscription : janvier 2006
Messages : 1 307
Points : 1 643
Points : 1 643
Envoyer un message via AIM à mpeppler
avant d'exécuter la query.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 11h39   #8
pierre arnaud
Nouveau Membre du Club
 
Homme
Développeur décisionnel
Inscription : juillet 2002
Messages : 61
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur décisionnel

Informations forums :
Inscription : juillet 2002
Messages : 61
Points : 26
Points : 26
J'ai toujours mon problème de valeur NULL a remplacer car il plante lors de l'import.
Le champ de destination est de type char(3)...

Petit à petit l'oiseau fait son nid
pierre arnaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 14h50   #9
pierre arnaud
Nouveau Membre du Club
 
Homme
Développeur décisionnel
Inscription : juillet 2002
Messages : 61
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur décisionnel

Informations forums :
Inscription : juillet 2002
Messages : 61
Points : 26
Points : 26
C'est ok j'ai trouvé la solution j'ai modifié ma commande sed :

Code :
sed "s/^ *//;s/ *$//;s/ \{1,\}//g;s/NULL//" <test_temp.csv> test.csv
Merci pour tout
pierre arnaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h34.


 
 
 
 
Partenaires

Hébergement Web