-
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
-
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!)
-
Warum nimmst du nicht einfach den CPYTOIMPF?
-
Danke Fuerchau.
Ich wollte keine PF für die Ausgabe erstellen, die ich dann mit CPYTOIMPF nach CSV bringe.
Vg.
Peet
 Zitat von Fuerchau
Warum nimmst du nicht einfach den CPYTOIMPF?
-
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.
-
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
-
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 von Fuerchau
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.
-
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
-
Danke Andreas.
Vg.
Peet
 Zitat von Andreas_Prouza
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
-
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.
-
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 von RobertPic
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.
-
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 von Robi
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.
Similar Threads
-
By Robi in forum IBM i Hauptforum
Antworten: 22
Letzter Beitrag: 05-10-23, 17:57
-
By camouflage in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-02-16, 09:02
-
By Etherion in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 10-09-10, 07:36
-
By jogisarge in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 21-04-06, 13:00
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks