Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2002
    Messages
    62
    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 : 62
    Points : 27
    Points
    27

    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
    "incorrect syntax near OUTPUT"
    Comment dois je procéder ? avez vous d'autre possibilité ?
    Merci !!

  2. #2
    Rédacteur/Modérateur

    Inscrit en
    janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 307
    Points : 1 750
    Points
    1 750

    Par défaut

    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

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2006
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : octobre 2006
    Messages : 222
    Points : 402
    Points
    402

    Par défaut

    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

  4. #4
    Nouveau Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2002
    Messages
    62
    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 : 62
    Points : 27
    Points
    27

    Par défaut

    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

  5. #5
    Rédacteur/Modérateur

    Inscrit en
    janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 307
    Points : 1 750
    Points
    1 750

    Par défaut

    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

  6. #6
    Nouveau Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2002
    Messages
    62
    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 : 62
    Points : 27
    Points
    27

    Par défaut

    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

  7. #7
    Rédacteur/Modérateur

    Inscrit en
    janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 307
    Points : 1 750
    Points
    1 750

    Par défaut

    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

  8. #8
    Nouveau Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2002
    Messages
    62
    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 : 62
    Points : 27
    Points
    27

    Par défaut

    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

  9. #9
    Nouveau Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2002
    Messages
    62
    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 : 62
    Points : 27
    Points
    27

    Par défaut

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •