PDA

View Full Version : Fehler bei Stored Procedure



KM
23-11-17, 13:27
Hallo,

ich habe folgendes Problem...

Wir haben ein relativ kompliziertes RPGLE-Programm, das zu einem Artikel den Standardpreis und den Aktionspreis ermittelt. Darin wird unter anderem auch ein OUT auf die *LDA durchgeführt. Jetzt habe ich für dieses Programm eine Stored Procedure als Wrapper erstellt mit 3 Input-Parametern und 2 Output-Parametern (Standardpreis und Aktionspreis). Wenn ich das z.B. mit Java teste, funktioniert das auch ohne Probleme.

Jetzt habe ich um diese Stored Procedure herum auch noch eine SQL-Funktion erstellt, mit der ich jeweils nur einen der beiden Preise erhalten möchte. Beim Aufruf dieser SQL-Funktion, die im Prinzip nur die Stored Procedure aufruft, erhalte ich folgenden Fehler:


Programmstatus . . . . . . . . . . . . : 00413
Während der Verarbeitung von Datenbereich ist ein E/A-Fehler aufgetreten (C G D F).


Funktion CHGDTAARA nicht zulässig.

Das passiert genau an der Stelle, an der im RPGLE-Programm der OUT auf die *LDA durchgeführt wird.

Kann mir jemand sagen warum ich die Stored Procedure ohne Fehler aufrufen kann, aber bei der SQL-Funktion (als Wrapper) dieser Fehler auftritt?

Vielen Dank,
KM

Pikachu
23-11-17, 14:00
Change Data Area (CHGDTAARA) (https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/cl/chgdtaara.htm)

Vielleicht CPF180B oder CPF180C ?

"Changing the special data areas (*LDA, *GDA and *PDA) is allowed from the initial thread only and will fail if attempted from a secondary thread."

KM
23-11-17, 14:15
Das mit den weiteren Threads könnte die Erklärung sein. Das ist ja doof.

Stimmt, ich erhalte die CPF180C.

Danke,
KM

BenderD
23-11-17, 14:26
... eigentlich leiste ich ja ungern Beihilfe zum Huddel (LDA aus SQL Function benutzen: es schüttelt mich). Was hast Du denn für Parameter beim create function? Vielleicht hilft ja disallow parallel.

D*B

KM
23-11-17, 14:36
Ich weiß, mich nervt es selbst, dass es nicht einfacher gelöst werden kann. Aber es ist halt ein "historisches" Programm.

Disallow Parallel hat leider nichts gebracht.

Gruß,
KM

Fuerchau
23-11-17, 15:25
Ergänzend könnte vielleicht noch "NOT FENCED" etwas bringen.
Ansonsten musst du da wahrscheinlich ein OPM-CLP als Wrapper verwenden, der dann den CHGDTAARA durchführen könnte. OPM's werden in einer anderen ACTGRP aufgerufen und sind nicht Threadfähig.

KM
24-11-17, 13:26
Die Option "NOT FENCED" hat die Lösung gebracht. Damit funktioniert es nun und hat mir einiges an Arbeit erspart.

Vielen Dank,
KM

Fuerchau
25-11-17, 10:09
NOT FENCED ist i.Ü. die einzige Möglichkeit, die externe Prozedur mittels STRSRVJOB/STRDBG von einem anderen Job aus zu debuggen. Innerhalb des SQL-Jobs (z.B. STRSQL) klappt das einfach nicht.