Anmelden

View Full Version : SQL Funktion ruft Serviceprogramm auf - Parameter übergabe



loisl
08-11-13, 13:21
Hallo,
ich habe ein Problem mit dem Aufrufen eines Seviceprogramms aus einer SQL-Funkrion herraus. Es wird zwar aufgerufen, aber es übernimmt die Werte nicht in das Serviceprogramm. Der Returnwert wird zurückgegeben.
Die Funktion schaut so aus:

Create Function arbeiten(Wert Char(7), Richtung Char(1) )
Returns Char(7)
Language RPGLE
Specific arbeiten
Not Deterministic
Returns Null on Null input
No external Action
Not Fenced
External Name 'ARBLIB/ARBSERVICE(ARBEITEN)';

Das Modul Arbeiten im Serviceprogramm ARBSERVICE übernimmt die Werte so:

D Arbeiten....PR.....7
D Wert...............7
D Richtung ..........1

P arbeiten....b......... export
d arbeiten... pi.....7
d wert ..............7
d richtung ..........1

d arbeit_out ........7
//free

exec sql tu irgend was;

arbeit_out = wert;

return arbeit_out;

/end-free
P .........E

Das Serviceprogramm macht was es soll. Die SQL-Funktion ruft auch das Serviceprogramm auf. Aber die Daten werden nicht übernommen. Nur zurückgegeben.

Aufgerufen wird es dann über STRSQL und:

select arbeiten(a.Dateiwert, '1'), a.Dateiwert from Arbeitsdate a

Schon mal danke für die Hilfe.
Loisl

Fuerchau
08-11-13, 13:28
SQL übergibt 3 Felder wobei das 3. Feld dein Returnwert ist.
Das Ergebnis des RPG-Return wird ignoriert.

Da kann man mal sehen, welche Probleme auftreten können, wenn es keine Laufzeitprüfung der Call-Parameter gibt.
Mittels %parms() kann man die Anzahl der Parameter prüfen und darauf reagieren.
Intern ist leider jede Funktion mit Anzahl Parameter 0 - 255 definiert.
Deshalb gibts auch keine Laufzeitfehler bei falschen Aufrufen.

loisl
08-11-13, 14:21
Und wie komme ich dann an meine Werte ran, die von der Funktion übergeben werden?
Bedeutet ich übegebe einen 7stelligen pseudowert? Und habe dann im zweiten und dritten mein Feld?
Das der Returnwert funktioniert habe ich übrigens so geprüft, das ich den Wert zwischen durch im Serviceprogramm fest vergeben habe.

AG1965_2
08-11-13, 15:13
Hab's mal mit meiner Definition einer Funktion verglichen und da fällt mir auf, dass Du beim CREATE FUNCTION etwas nicht angegeben hast, was ich schon habe: PARAMETER STYLE GENERAL
Das war nicht unwichtig, erinnere ich mich dunkel. Der Rest ist gleich.

loisl
08-11-13, 16:37
Danke werd ich probieren :-)