PDA

View Full Version : SQL-Script ausführen



Seiten : [1] 2

Sensonaut
05-05-09, 14:48
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

BenderD
05-05-09, 15:23
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

Pikachu
05-05-09, 15:31
Vielleicht wäre auch ein STRQMQRY eine Möglichkeit?

Fuerchau
05-05-09, 16:50
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.

funboard
06-05-09, 07:25
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

Sensonaut
06-05-09, 08:19
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

Fuerchau
06-05-09, 09:49
Was soll SQL da auch machen ?
Du musst die Zieldatei mit einer gültigen CCSID versehen.

Sensonaut
07-05-09, 07:32
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

Fuerchau
07-05-09, 07:48
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 ?

BenderD
07-05-09, 08:44
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