[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    308

    Question QSH db2 sql Ausgabe nach CSV

    Hallo zusammen,
    ich bin mir ziemlich sicher, dass ich das schon einmal gemacht habe, ich finde es aber nicht.

    Ich möchte mit QSH ein SQL Befehl ausführen und das Ergebnis als CSV mit Semikolon als Trennzeichen ausgeben.

    db2 select a.* from daten.kunde a where a.lastuse = 2026 >/tmp/kunden.csv

    Ich bekomme aber "nur" eine formatierte Ausgabe mit Header, den Daten und Anzahl Sätzen am Ende der kunden.csv

    Kann mir jemand da weiterhelfen ???
    Vielen Dank im Voraus.
    Peet

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.065
    KI ergebnis aus google

    Um einen SQL-Befehl über QSH auszuführen und direkt als CSV-Datei mit Semikolon zu speichern, können Sie das Qshell-Dienstprogramm db2 mit einer SQL-Verkettung (Concatenation) für die Trennzeichen verwenden.Führen Sie den folgenden Befehl in der QSH-Kommandozeile aus:db2 "SELECT spalte1 || ';' || spalte2 || ';' || spalte3 FROM bibliothek.tabelle" > /pfad/zur/datei.csvWichtige Details:Trennzeichen: Das Semikolon muss im SQL-String in einfache Anführungszeichen gefasst und mit dem Verkettungsoperator (||) an die Spalten angehängt werden.Datentypen: Nicht-Zeichenfelder (wie numerische Werte oder Datumsangaben) müssen vorher mit der Funktion CHAR() oder VARCHAR() in Text umgewandelt werden, da sie sonst nicht mit || verkettet werden können.Alternativen (Komfort): Oft ist es wesentlich einfacher, die IBM i Access Client Solutions (ACS) zu verwenden. Nutzen Sie dort das Tool Run SQL Scripts, führen Sie Ihre Abfrage aus und exportieren Sie das Resultat über das Menü Datei oder per Rechtsklick direkt als CSV.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.890
    Warum nimmst du nicht einfach den CPYTOIMPF?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jan 2003
    Beiträge
    308
    Danke Robi.
    Das habe ich gesehen, da ich aber noch mit db2 -t gearbeitet habe, hatte ich eine Ausgabe in die .CSV mit Header, den Daten und eine Endzeile.
    Mein Fehler, ich bin dann erst später auf die Idee gekommen, das Attribut -t für db2
    zu entfernen.

    Bei der Lösung ist es allerdings so, dass die Codierung des sql-Befehls wäre recht umfangreich, ich habe natürlich eine komplexe SELECT Klausel und auch eine entsprechende WHERE Klausel.
    In meinem Post hatte ich das nur als Beispiel dargestellt.
    Nochmals Danke und Vg.
    Peet


    Zitat Zitat von Robi Beitrag anzeigen
    KI ergebnis aus google

    Um einen SQL-Befehl über QSH auszuführen und direkt als CSV-Datei mit Semikolon zu speichern, können Sie das Qshell-Dienstprogramm db2 mit einer SQL-Verkettung (Concatenation) für die Trennzeichen verwenden.Führen Sie den folgenden Befehl in der QSH-Kommandozeile aus:db2 "SELECT spalte1 || ';' || spalte2 || ';' || spalte3 FROM bibliothek.tabelle" > /pfad/zur/datei.csvWichtige Details:Trennzeichen: Das Semikolon muss im SQL-String in einfache Anführungszeichen gefasst und mit dem Verkettungsoperator (||) an die Spalten angehängt werden.Datentypen: Nicht-Zeichenfelder (wie numerische Werte oder Datumsangaben) müssen vorher mit der Funktion CHAR() oder VARCHAR() in Text umgewandelt werden, da sie sonst nicht mit || verkettet werden können.Alternativen (Komfort): Oft ist es wesentlich einfacher, die IBM i Access Client Solutions (ACS) zu verwenden. Nutzen Sie dort das Tool Run SQL Scripts, führen Sie Ihre Abfrage aus und exportieren Sie das Resultat über das Menü Datei oder per Rechtsklick direkt als CSV.

  5. #5
    Registriert seit
    Jan 2003
    Beiträge
    308
    Danke Fuerchau.
    Ich wollte keine PF für die Ausgabe erstellen, die ich dann mit CPYTOIMPF nach CSV bringe.
    Vg.
    Peet

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Warum nimmst du nicht einfach den CPYTOIMPF?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.890
    Ich hatte die Where-Klausel nicht gesehen.
    Dafür kannst du am einfachsten via ACS ud SQL-Script den SQL ausführen und als CSV oder Excel speichern. Das lässt sich dann sogar automatisieren.

    Oder für Geld nimmst du ein Tool, wie z.B. FTIS.Connect.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Dec 2000
    Beiträge
    289
    Was spricht denn gegen eine PF?
    ich mache das ganze in einem CL Programm. Baue mir dort den SQL zusammen create Table.... in die QTEMP (runsql)
    dann den cpytoimpf.
    CPYTOIMPF FROMFILE(QTEMP/DATEI TOSTMF(&xxxx) +
    MBROPT(*REPLACE) STMFCCSID(1208) +
    RCDDLM(*LF) DTAFMT(*DLM) STRDLM('') +
    FLDDLM(';') NUMFLDPAD(*BLANK) +
    DECPNT(*COMMA) ADDCOLNAM(*SQL)
    Programmierung

  8. #8
    Registriert seit
    Jan 2003
    Beiträge
    308
    Es muss als Job laufen, z.B. über SCD-Jobs.
    Die Lösung mit dem create table ist schon ok.
    Da kann ich dann auch alles automatisieren.
    Vg.
    Peet

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich hatte die Where-Klausel nicht gesehen.
    Dafür kannst du am einfachsten via ACS ud SQL-Script den SQL ausführen und als CSV oder Excel speichern. Das lässt sich dann sogar automatisieren.

    Oder für Geld nimmst du ein Tool, wie z.B. FTIS.Connect.

  9. #9
    Registriert seit
    Nov 2020
    Beiträge
    457
    Du könntest das CSV auch direct im SQL erstellen lassen. In der QSH kannst du via cl den RUNSQL Befehl aufrufen:

    cl -v "runsql ('CALL QSYS2.IFS_WRITE_utf8(PATH_NAME =>''/tmp/test.csv'', \
    LINE => \
    (select LISTAGG(id concat '';'' concat loglevel concat '';'' concat text, x''0d'') \
    WITHIN GROUP (ORDER BY id) \
    from prouza.logger))')"


    lg Andreas

  10. #10
    Registriert seit
    Jan 2003
    Beiträge
    308
    Danke Andreas.
    Vg.
    Peet

    Zitat Zitat von Andreas_Prouza Beitrag anzeigen
    Du könntest das CSV auch direct im SQL erstellen lassen. In der QSH kannst du via cl den RUNSQL Befehl aufrufen:

    [FONT="]cl -v "runsql ('CALL QSYS2.IFS_WRITE_utf8(PATH_NAME =>''/tmp/test.csv'', \
    LINE => \
    (select LISTAGG(id concat '';'' concat loglevel concat '';'' concat text, x''0d'') \
    WITHIN GROUP (ORDER BY id) \
    from prouza.logger))')"
    [/FONT]


    lg Andreas

  11. #11
    Registriert seit
    Oct 2004
    Beiträge
    258
    Einen habe ich noch - aber nur für das aktuelle Release (V7R5).
    Natürlich auch als RUNQRY etc. ausführbar - der Job darf aber nicht unter CCSID 65535 laufen.

    Code:
    db2 -v "VALUES SYSTOOLS.GENERATE_SPREADSHEET(PATH_NAME  => '/home/RP/outfile', 
             SPREADSHEET_QUERY => 'select * from tabelle where feld = <> 0',
             SPREADSHEET_TYPE => 'csv', COLUMN_HEADINGS   => 'COLUMN')"
    Ausgabe wäre dann: outfile + Outtype, hier CSV.

    Das Ding kann auch xls, xlsx, txt und odt. Das CSV ist leider für unsere Breitengrade unpassend - da englische Satzzeichen (Komma als Trennzeichen). Angeblich mit der Umgebung/Sprache steuerbar - das halte ich aber für eine KI-Fantasie.....unsere Maschine ist sowas von DEUTSCH.

    Für CSV fährst du sicher mit den bisherigen (nativen) Vorschlägen besser. Für xls(x) kann das schon mal eine Option sein.

    Vor > 20/25 Jahren hätte mich so ein Feature sehr gefreut. Aber mittlerweile hat man dafür wohl ein Tool gebaut oder gekauft, welches formatieren, splitten, verteilen (smtp, Samba, (s)ftp, webdav, IMAP, Sharepoint....), aktualisieren usw. kann.

  12. #12
    Registriert seit
    Jan 2003
    Beiträge
    308
    Super Andreas, danke.
    Das mit dem GENERATE_SPREADSHEET habe ich mal gelesen, aber ich habe oft V7R4 oder kleiner.

    Vor < 20/25 Jahren konnte man das gut mit dem Dateitransfer Tool von IBM machen, alles unter .DTF gespeichert, und dann mit rmtcmd ausgeführt.
    Das hat jetzt in diesem Fall wirklich > 20 Jahre funktioniert.
    Aber jetzt wollte man etwas "flexiblers"
    Danke noch mals.
    Vg.
    Peet


    Zitat Zitat von RobertPic Beitrag anzeigen
    Einen habe ich noch - aber nur für das aktuelle Release (V7R5).
    Natürlich auch als RUNQRY etc. ausführbar - der Job darf aber nicht unter CCSID 65535 laufen.

    Code:
    db2 -v "VALUES SYSTOOLS.GENERATE_SPREADSHEET(PATH_NAME  => '/home/RP/outfile', 
             SPREADSHEET_QUERY => 'select * from tabelle where feld = <> 0',
             SPREADSHEET_TYPE => 'csv', COLUMN_HEADINGS   => 'COLUMN')"
    Ausgabe wäre dann: outfile + Outtype, hier CSV.

    Das Ding kann auch xls, xlsx, txt und odt. Das CSV ist leider für unsere Breitengrade unpassend - da englische Satzzeichen (Komma als Trennzeichen). Angeblich mit der Umgebung/Sprache steuerbar - das halte ich aber für eine KI-Fantasie.....unsere Maschine ist sowas von DEUTSCH.

    Für CSV fährst du sicher mit den bisherigen (nativen) Vorschlägen besser. Für xls(x) kann das schon mal eine Option sein.

    Vor > 20/25 Jahren hätte mich so ein Feature sehr gefreut. Aber mittlerweile hat man dafür wohl ein Tool gebaut oder gekauft, welches formatieren, splitten, verteilen (smtp, Samba, (s)ftp, webdav, IMAP, Sharepoint....), aktualisieren usw. kann.

Similar Threads

  1. Antworten: 22
    Letzter Beitrag: 05-10-23, 17:57
  2. QSH im CL/Batch Fehler qsh: 001-0014
    By camouflage in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-02-16, 09:02
  3. Antworten: 2
    Letzter Beitrag: 10-09-10, 07:36
  4. csv-Datei von AS400 nach Excel
    By jogisarge in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 21-04-06, 13:00
  5. Datentransfer DB2 iseries nach DB2 RS/6000
    By rcide in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 17-08-04, 12:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •