PDA

View Full Version : COBOL Stored Procedure mit Return Code?



Seiten : 1 [2]

Fuerchau
12-02-20, 12:58
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajp/rzajppdf.pdf
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/sqlp/rbafypdf.pdf
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzpdf.pdf

Gerade in letzterm findest du bei CREATE PROCEDURE/FUNCTION sowie den Parameter-Typen (General, DB2, SQL) die Erklärungen. Dann wirds vielleicht klarer.

Das meiste meiner SQL-Kenntnisse habe ich daraus, der Rest ist Erfahrung;-).

ChookaA
13-02-20, 12:36
Also ich komme nur geringfügig weiter:

Ich rufe jetzt via einer SQL SP die CBL SP auf, da mit die AS400 nicht erlaubt innerhalb der CBL SP SQL-Code (Language SQL) auszuführen (richtig?), sieht so aus:

SQL SP:
CREATE OR REPLACE PROCEDURE SCHEMA.SP_CBL_PRG(
IN LINKAREA_PAR CHAR(1024) CCSID 273,
IN PRG_PAR CHAR(1292) CCSID 273
)
LANGUAGE SQL
BEGIN
DECLARE RETURN_VALUE INTEGER;
CALL SCHEMA.SP_CBL_PRG(LINKAREA_PAR,PRG_PAR,RETURN_VALU E);
INSERT INTO SCHEMA.PRG_RETURN VALUES (LINKAREA_PAR,PRG_PAR,RETURN_VALUE);
END;


CBL SP:
CREATE OR REPLACE PROCEDURE SCHEMA.SP_CBL_PRG(
INOUT LINKAREA_PAR CHAR(1024) CCSID 273 ,
INOUT PRG_PAR CHAR(1292) CCSID 273,
OUT RETURN_VALUE INTEGER DEFAULT 0
)
LANGUAGE COBOL
DYNAMIC RESULT SETS 1
SPECIFIC SCHEMA.SP_CBL_PRG
DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'SCHEMA/PRG'
PARAMETER STYLE GENERAL;

Das geht aber ich komme nicht an die Return Value (INTEGER) dran...

Fuerchau
13-02-20, 13:16
DAS muss doch das CBL-Programm machen;-)!
MODIFIES SQL DATA => erlaubt, dass du im COBOL auch SQL machen darfst.
Der RETURN_VALUE als INT bekommst du in COBOL als 3. Parameter vom Typ COMP-4 (leider nur mit PIC S9999 comp-4) .
Somit kannst du den SQLCODE des COBOL in den Parameter schieben und ebenso den Insert in deine Logtabelle schreiben.

Für die Erweiterung von INT-Variablen in Cobol, gibt es die "Process notrunc"-Anweisung. Dann klappt auch ein "MOVE 32767 TO MYINT".

ChookaA
18-02-20, 10:05
Hallo, ich habe jetzt einfach die COBOL Parameter als INOUT definiert und schreibe das dann in eine kleine Tabelle und siehe da: Der Return Code ist vorhanden wenn man einen Fehler provoziert...