PDA

View Full Version : Aufruf SQL Prozedur von SQLRPGLE



Dschainers
27-08-19, 15:59
Hallo,
ich habe hier ein System V7.3 mit PTF Stand TL18242.
Ich versuche verzweifelt eine SQL Prozedur von einem SQLRPGLE Programm aufzurufen.
Ich bekomme immer nachfolgende Meldungen im Joblog:

Zeiger für angegebene Position nicht gesetzt.
Anwendungsfehler. MCH3601 nicht überwacht durch TEST0002 bei Anweisung
0000000007, Instruktion X'0000'.
Fehler von Auslöserprogramm oder externer Routine erkannt.

Mein Programm:
D ParmIn S 13A
D ParmOut S 1A
c z-add *zeros error_nr 3 0
/free
ParmIn = 'Testtest';
EXEC SQL Call TEST0002 (:ParmIn, :ParmOut);
if sqlcod <> 0 and sqlcod <> 100;
Error_Nr = 04;
endif;
/end-free
c dsply parmout
c dsply error_nr
c dsply sqlcod
c dsply sqlstate
C move *on *inlr

Die Parameter stimmen definitiv mit der SQL Prozedur überein.

Ich hab schon hier im Forum gesucht, da war auch ein Beitrag, allerdings war da am Schluss keine Lösung/Ergebnis gestanden.

Was mache ich falsch, bzw. geht das überhaupt.

Danke

Fuerchau
27-08-19, 16:04
Schau mal ins Joblog auf die genauen Meldungen.
Per F9 auf der Meldung kann man sehen, von wo die Nachricht ausgelöst wurde. Ggf. wird sie ja nur durchgereicht.

Dschainers
28-08-19, 07:59
Problem gelöst!

Mein Fehler war, dass ich mit TEST0002 aufgerufen habe, statt mit dem Namen der Prozedur.
Der Name der Prozedur ist "ReWe_FiBu_test".

Hier die Prozedur:

-- erst löschen
call dsg_drop_procedure('xxx', 'ReWe_FiBu_test');
--neu anlegen
create procedure xxx/ReWe_FiBu_test
(
-- Input-Parameter
In $In_MandKenn char(13),
-- OUTPUT
Out $Status char(1)
)
LANGUAGE SQL
SPECIFIC xxx/TEST0002
NOT DETERMINISTIC
MODIFIES SQL DATA
MAIN : BEGIN

declare i_Mandkenn char(13);
--declare O_Error_Nr numeric(4, 0);

Set i_Mandkenn = $In_Mandkenn;

--Delete from D_FYWAB
--where MANDKENN = I_MANDKENN;

set $status = i_mandkenn;

End MAIN;

Fuerchau
28-08-19, 11:09
Daran kann man mal wieder sehen, dass man ja jedes Programm ebenso auch als Prozedur aufrufen kann, wenn man denn die Parameter alle kennt;-).