PDA

View Full Version : Artgate im SQLRPGLE Pgm



Robi
19-03-20, 14:05
Hall *all,
ich brauch doch noch mal Artgate hilfe.

interaktiv / strsql klappt alles

mein ablauf

SQLRPGLE-PGM a, ACTGRP A holt mit
EXEX SQL SET :cnt = (select ...)

einen Wert
ist der Wert <> 0, ruft es SQLRPGLE-PGM B, ACTGRP B

Das B pgm macht
(qcmdexc)
sbmjob call javagate nach qinter
delay 5 sekunden

SQL
set option commit=*CS, Naming=*SQL
connect to externeDB
set :wert = (select wert from externeDB.dbo.... where Feld=:wert2)

dann
SQL
release externeDB und commit

Das Joblog sagt:


Nachricht . . . : Job 595074/QPGMR4/JAVAGATE an Jobwarteschlange QINTER in
Bibliothek QGPL übergeben.
CPC9801 Beendigung 00 19.03.20 14:17:34,784158 QMHQCRTQ QSYS 0902 QC2SYS QSYS *STMT
Zielmodul . . . . . . . . . : QC2SYS
Zielprozedur . . . . . . . : system
Anweisung . . . . . . . . . : 13
Nachricht . . . : Objekt R595072 der Art *DTAQ in Bibliothek JVAGATE
erstellt.
*NONE Beendigung 19.03.20 14:17:36,911813 JDBCGATE JVAGATE *STMT QRWSARDB QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSARDB
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 18299
Nachricht . . . : JDBCGATE: ACTGRP : 20
*NONE Beendigung 19.03.20 14:17:36,914055 JDBCGATE JVAGATE *STMT QRWSARDB QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSARDB
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 18299
Nachricht . . . : JDBCGATE: SQLCODE: 0 SQLSTATE 00000 EXDB01
ActivationGroup: 20
*NONE Beendigung 19.03.20 14:17:36,914094 JDBCGATE JVAGATE *STMT QRWSARDB QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSARDB
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 18299
Nachricht . . . : JDBCGATE:
*NONE Beendigung 19.03.20 14:18:36,945801 JVAGATE JVAGATE *STMT JDBCGATE JVAGATE *STMT
Ausgangsmodul . . . . . . . : JVAGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 582
Zielmodul . . . . . . . . . : JDBCGATE
Zielprozedur . . . . . . . : WORK
Anweisung . . . . . . . . . : 320
Nachricht . . . : JVAGATE: timeOut
occurred Ø ¹ Ü °Ø ¹ Ü ¦Ø ¹J Ò H-Ø ¹J Ò
H&Ø
CPF9898 Abbruch 40 19.03.20 14:18:36,945826 JVAGATE JVAGATE *STMT JDBCGATE JVAGATE *STMT
Ausgangsmodul . . . . . . . : JVAGATE
Ausgangsprozedur . . . . . : ERROR
Anweisung . . . . . . . . . : 562
Zielmodul . . . . . . . . . : JDBCGATE
5770SS1 V7R3M0 160422 Jobprotokoll S4405619 19.03.20 14:22:37 CET Seite 3
Jobname . . . . . . . . . . : EXTDB_STU Benutzer . . . . : QPGMR4 Nummer . . . . . . . . . . . : 595072
Jobbeschreibung . . . . . . : BBEE Bibliothek . . . : T1812002
NACHR-ID ART BEW DATUM ZEIT VON PGM BIBLIOTHEK INST AN PGM BIBLIOTHEK INST
Zielprozedur . . . . . . . : WORK
Anweisung . . . . . . . . . : 320
Nachricht . . . : timeOut occurred:.
Ursache . . . . : Diese Nachricht wird von Anwendungsprogrammen als
allgemeine Abbruchnachricht verwendet.
*NONE Beendigung 19.03.20 14:18:36,946046 JDBCGATE JVAGATE *STMT QRWSEXEC QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSEXEC
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 19726
Nachricht . . . : JDBCGATE: SQLCODE: -913 SQLSTATE 57033 ESOLU01
ActivationGroup: 20
*NONE Beendigung 19.03.20 14:18:36,946056 JDBCGATE JVAGATE *STMT QRWSEXEC QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSEXEC
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 19726
Nachricht . . . : JDBCGATE: timeout ocurred - check Server
CPD3E06 Diagnose 10 19.03.20 14:18:36,946165 QRWSEXEC QSYS *STMT QRWSEXEC QSYS *STMT
Ausgangsmodul . . . . . . . : QRWSEXEC

Ausgangsprozedur . . . . . : ARD3E06
Anweisung . . . . . . . . . : 20414
Zielmodul . . . . . . . . . : QRWSEXEC
Zielprozedur . . . . . . . : ARD3E06
Anweisung . . . . . . . . . : 20414
Nachricht . . . : Für das Format ARXD0100 zurückgegebene Daten sind
ungültig.
Ursache . . . . : Die vom Treiberprogramm der Anwendung zurückgegebenen
Daten stimmen nicht mit dem Format überein, das für den Formatnamen ARXD0100
erforderlich ist. Fehlerbeseitigung: Gelieferte Daten korrigieren und die
Anforderung wiederholen.
SQL0969 Diagnose 30 19.03.20 14:18:36,946248 QSQROUTE QSYS *STMT QSQROUTE QSYS *STMT
Ausgangsmodul . . . . . . . : QSQROUTE
Ausgangsprozedur . . . . . : NORMEXIT
Anweisung . . . . . . . . . : 27656
Zielmodul . . . . . . . . . : QSQROUTE
Zielprozedur . . . . . . . : NORMEXIT
Anweisung . . . . . . . . . : 27656
Nachricht . . . : Fehler beim Übergeben der Anforderung an das
Anwendungs-Requester-Treiberprogramm aufgetreten.
Ursache . . . . : Während die SQL-Anforderung an das
Anwendungs-Requester-Treiberprogramm für die relationale Datenbank ESOLU01
übergeben wurde, ist ein unerwarteter Fehler aufgetreten. Die zuvor
aufgelisteten Nachrichten im Jobprotokoll geben Auskunft über die Ursache
des Fehlers. Fehlerbeseitigung: Alle Fehler korrigieren und die Anforderung
wiederholen.
*NONE Beendigung 19.03.20 14:19:36,979084 JVAGATE JVAGATE *STMT JDBCGATE JVAGATE *STMT
Ausgangsmodul . . . . . . . : JVAGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 582
Zielmodul . . . . . . . . . : JDBCGATE
Zielprozedur . . . . . . . : WORK
5770SS1 V7R3M0 160422 Jobprotokoll S4405619 19.03.20 14:22:37 CET Seite 4
Jobname . . . . . . . . . . : ESOLU_STU Benutzer . . . . : QPGMR4 Nummer . . . . . . . . . . . : 595072
Jobbeschreibung . . . . . . : BBEE Bibliothek . . . : T1812002
NACHR-ID ART BEW DATUM ZEIT VON PGM BIBLIOTHEK INST AN PGM BIBLIOTHEK INST
Anweisung . . . . . . . . . : 320
Nachricht . . . : JVAGATE: timeOut
occurred Ø ¹ Ü °Ø ¹ Ü ¦Ø ¹J Ò H-Ø ¹J Ò
H&Ø
CPF9898 Abbruch 40 19.03.20 14:19:36,979111 JVAGATE JVAGATE *STMT JDBCGATE JVAGATE *STMT
Ausgangsmodul . . . . . . . : JVAGATE
Ausgangsprozedur . . . . . : ERROR
Anweisung . . . . . . . . . : 562
Zielmodul . . . . . . . . . : JDBCGATE
Zielprozedur . . . . . . . : WORK
Anweisung . . . . . . . . . : 320
Nachricht . . . : timeOut occurred:.
Ursache . . . . : Diese Nachricht wird von Anwendungsprogrammen als
allgemeine Abbruchnachricht verwendet.
*NONE Beendigung 19.03.20 14:19:36,979275 JDBCGATE JVAGATE *STMT QRWSEXEC QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSEXEC
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 19726

Nachricht . . . : JDBCGATE: SQLCODE: -913 SQLSTATE 57033 EXDB01
ActivationGroup: 20
*NONE Beendigung 19.03.20 14:19:36,979285 JDBCGATE JVAGATE *STMT QRWSEXEC QSYS *STMT
Ausgangsmodul . . . . . . . : JDBCGATE
Ausgangsprozedur . . . . . : JOBLOGOUT
Anweisung . . . . . . . . . : 438
Zielmodul . . . . . . . . . : QRWSEXEC
Zielprozedur . . . . . . . : CALLARD
Anweisung . . . . . . . . . : 19726
Nachricht . . . : JDBCGATE: timeout ocurred - check Server
CPD3E06 Diagnose 10 19.03.20 14:19:36,979337 QRWSEXEC QSYS *STMT QRWSEXEC QSYS *STMT
Ausgangsmodul . . . . . . . : QRWSEXEC
Ausgangsprozedur . . . . . : ARD3E06
Anweisung . . . . . . . . . : 20414
Zielmodul . . . . . . . . . : QRWSEXEC
Zielprozedur . . . . . . . : ARD3E06
Anweisung . . . . . . . . . : 20414
Nachricht . . . : Für das Format ARXD0100 zurückgegebene Daten sind
ungültig.
Ursache . . . . : Die vom Treiberprogramm der Anwendung zurückgegebenen
Daten stimmen nicht mit dem Format überein, das für den Formatnamen ARXD0100
erforderlich ist. Fehlerbeseitigung: Gelieferte Daten korrigieren und die
Anforderung wiederholen.
SQL0969 Diagnose 30 19.03.20 14:19:36,980773 QSQROUTE QSYS *STMT QSQROUTE QSYS *STMT
Ausgangsmodul . . . . . . . : QSQROUTE
Ausgangsprozedur . . . . . : NORMEXIT
Anweisung . . . . . . . . . : 27656
Zielmodul . . . . . . . . . : QSQROUTE
Zielprozedur . . . . . . . : NORMEXIT
Anweisung . . . . . . . . . : 27656
Nachricht . . . : Fehler beim Übergeben der Anforderung an das
Anwendungs-Requester-Treiberprogramm aufgetreten.
Ursache . . . . : Während die SQL-Anforderung an das
Anwendungs-Requester-Treiberprogramm für die relationale Datenbank EXDB01
übergeben wurde, ist ein unerwarteter Fehler aufgetreten. Die zuvor




Interaktiv mach ich den set commit und das naming *sql nicht, das geschied 'automatisch'

Was ist falsch

Danke

BenderD
19-03-20, 14:26
Hallo Robi,

set ist nicht unterstützt, Select muss mit dynamic SQL (prepare, open fetch) gemacht werden. Am einfachsten nimmst Du eines der Beispiele der Distribution und gehst danach vor (inklusive der Erstellungs commands).
Anzumerken ist noch, dass der Serverjob besser beim startup der Maschine gestartet wird und dann aktiv bleibt. Der bedient dann alle Anforderungen Multithreaded.

Dieter

Fuerchau
19-03-20, 14:42
Wichtig ist, wenn du mit einem zusammengestoppelten SQL arbeitest, trotzdem mit Parametern zu arbeiten.

MySQL = 'declare GetData cursor for select .... where a=? and b=?';
exec sql prepare mystmt from : MySQL;
exec sql open GetData using : P1, : P2;
exec sql fetch GetData into : F1, : F2, ....
exec sql close GetData;

SQL stellt sicher, dass die Variablen konvertiert werden (bzw. Dieter).
Allerdings muss die SQL-Syntax des Zielservers beachtet werden!
Dies gilt insbesonders für DateTime-Felder.

Robi
19-03-20, 15:13
SET ist nicht unterstützt ...

Sch...ade, das wirft das ganze Konzept durcheinander.

99 % der Informationen bekomme ich via HTTPGETCLOB im JSON Format.
1% fehlt, dafür gibt es keinen Service.

Nun lese ich die iSeries Datei und, wenn der Wert fehlt (in 1-n Datensätzen) wollte ich die Info so holen und ergänzen. Auf dem PC weis ich nicht, das mir die Info auf der iSeries fehlt.

Wo finde ich Beispiele?

würde das gehen? (ich weis nicht wo der close hingehört bzw ob ich den brauche)
IMMER:
set option commit und naming
connect to
declare
prepare
open
fetch (genau der eine Satz)
close
release
commit

oder wo muß der close hin?

Danke

@Baldur,

Danke, gerade erst gesehen, ...
fetch, close ist also die richtige Reihenfolge, ok Danke

Fuerchau
19-03-20, 15:21
Ich würde das als Service machen.
Dabei benötigst du nur einen Connect und Prepare!
Wenn du dann deinen Service in einer eigenen ACTGRP machst, bist du unabhängig von SQL's der Aufrufer da du diesem durch den Connect die "aktuelle" Datenbank verbiegst.
Damit beschränkt sich die Wiederholung auf Open/Fetch/Close, was am Ende genauso schnell wie der "set = " ist, da in diesem Fall nämlich dasselbe gemacht wird.

BenderD
19-03-20, 15:27
Beispiel findest Du z.B. hier:
https://sourceforge.net/p/appserver4rpg/codeSVN/HEAD/tree/appserver4rpg/QSYS.LIB/JVATEST.LIB/qrpglesrc.testardtyp

Sieh Dir auch die Objekterstellung an!

Dieter
PS: CLOB und BLOB sind nicht unterstützt (das ist eine IBM Einschränkung der ARDPGM Schnittstelle), da kannst Du allenfalls versuchen mit cast nach char dranzukommen.

Robi
19-03-20, 15:49
@Baldur.
prinzipiell gebe ich Dir recht.
Aber für 1-5 Daten alle 14 Tage...
(daher starte ich den ServerJob auch nur, wenn ich weiß, da ist mal wieder was nicht vollständig gekommen)

@Dieter
Bsp sehe ich mir an,
Clob und Blob brauche ich nicht, die liefern die Services

Danke

Fuerchau
19-03-20, 16:01
Übrigens: Ein Release klappt nur, wenn kein offener Commit existiert => Reihenfolge beachten.