View Full Version : SQL-Script ausführen
Hallo Ihr,
wir haben von einem Linux-System ein SQL-Script, welches eine Stored-Procedure auf einer fernen Datenbank ausführt und die Ausgabe in eine Datei umleitet. Wie kann ich so etwas auf der iSeries bewerkstelligen?
Soweit ich weiß, kann man mit RUNSQLSTM ein Skript ausführen. Kann ich in dem Skript dann auch CONNECT ausführen? Und wie kann ich die Ausgabe umleiten, ohne ein CL-Programm drum herum zu bauen? Oder geht auch alles mit der QShell?
Danke, Titus
da gibt es mehrere Hürden
- Connect geht nur, wenn die ferne Datenbank DRDA kann und ein Eintrag im RDB vorhanden ist
- im Script kommt man nicht an ein von einer stored Procedure zurück gegebenes ResultSet dran
- Ausgaben kann man im Script nicht einfach umleiten
Das sieht mir eher nach Java aus, aber da müsste man erstmal etwas genauer wissen, was ihr da vorhabt!
D*B
Hallo Ihr,
wir haben von einem Linux-System ein SQL-Script, welches eine Stored-Procedure auf einer fernen Datenbank ausführt und die Ausgabe in eine Datei umleitet. Wie kann ich so etwas auf der iSeries bewerkstelligen?
Soweit ich weiß, kann man mit RUNSQLSTM ein Skript ausführen. Kann ich in dem Skript dann auch CONNECT ausführen? Und wie kann ich die Ausgabe umleiten, ohne ein CL-Programm drum herum zu bauen? Oder geht auch alles mit der QShell?
Danke, Titus
Vielleicht wäre auch ein STRQMQRY eine Möglichkeit?
Das Problem mit Prozeduren, die Resultsets zurückgeben, hatte wir hier schon mal.
QMQRY, RUNSQLSTM, embedded SQL unterstützen das nicht.
Hier ist entweder Java oder ggf. CLI-Programmierung nötig.
Aus RPG heraus ist der Zugriff wohl am günstigsten über das CLI-API zu realisieren. Die SQL/CLI Schnittstelle bietet hier alle benötigten Funktionen.
- Connection herstellen
- Script ausführen (Stored Procedure)
- Ergebnis binden
- in lokale Datei wegschreiben
Eure Vorschläge sind alle sehr interessant. Mit CL oder RPG würde ich auch sicher etwas hingenommen. Das würde jetzt aber zu lange dauern. Wir haben hier mal weiter experimentiert. Inzwischen bin ich so weit, dass die Prozedur ausgeführt wird:
STRSQH CMD('db2 -x -r db -u dbuser -p dbpass "call generate_ff_data (13501, '02', ';')" | sed -n 's/;/&/p' > out.txt')Leider kommt es nun aber zu einem Problem mit CCSIDs. In der Ausgabedatei erscheint statt der Ausgabe ein SQL-Fehler 57017, der darauf hinweißt, dass eine Konvertierung von CCSID 13488 nach 65535 nicht möglich ist. Jemand ne Idee, wie man das Problem noch löst?
Titus
Was soll SQL da auch machen ?
Du musst die Zieldatei mit einer gültigen CCSID versehen.
Was soll SQL da auch machen ?
Du musst die Zieldatei mit einer gültigen CCSID versehen.
Das habe ich auch versucht. Ich habe mit CHGATR die CCSID der vorhandenen Ausgabedatei angepasst. Trotzdem kam der Fehler. :confused:
Titus
Was für eine Programm rufst du da auf ?
Vielleicht steht dein Job auf CCSID 65535 und das Programm hat nur beim Lesen der Daten Schwierigkeiten ?
lass doch mal die Pipe mit dem Streamfile Editor und die Umleitung in die Datei weg, ob es dann geht (dann liegts an dem sed - der auch eine CCSID Option hat - oder an der Ausgabefile).
D*B
Eure Vorschläge sind alle sehr interessant. Mit CL oder RPG würde ich auch sicher etwas hingenommen. Das würde jetzt aber zu lange dauern. Wir haben hier mal weiter experimentiert. Inzwischen bin ich so weit, dass die Prozedur ausgeführt wird:
STRSQH CMD('db2 -x -r db -u dbuser -p dbpass "call generate_ff_data (13501, '02', ';')" | sed -n 's/;/&/p' > out.txt')Leider kommt es nun aber zu einem Problem mit CCSIDs. In der Ausgabedatei erscheint statt der Ausgabe ein SQL-Fehler 57017, der darauf hinweißt, dass eine Konvertierung von CCSID 13488 nach 65535 nicht möglich ist. Jemand ne Idee, wie man das Problem noch löst?
Titus