PDA

View Full Version : Kontrollierter Abbruch in COBOL



wolfinho
19-03-09, 16:42
Hallo zusammen,

ich habe folgendes COBOL-Problem:

innerhalb eines COBOL-Programmes mit embedded SQL fange ich SQL-Fehler durch folgende Anweisung ab:

EXEC SQL
WHENEVER SQLERROR GOTO UP-SQL-ERROR
END-EXEC

UP-SQL-ERROR Section holt sich aus der SQLCA gewisse Informationen, schreibt diese in eine Protokolltabelle und mach dann einen GOBACK.

Allerdings wäre es Wartungsfreundlicher, wenn das Programm nicht wie in diesem Falle fehlerfrei beendet werdeb würde, sondern das Programm mit einer Fehlermeldung abbricht.

In der COBOL-Reference habe ich den STOP literal - Befehl gefunden. Leider hält dieser das Programm nur an und schreibt eine Message in die Nachrichtendatei *SYSOPR.

Idealerweise wäre aber eine sofortige Beendigung des Programmes mit einer Fehlernachricht.

Kenn jemand eine COBOL-Anweisung, mit der ich einen Abbruch des Programmes mit einer Fehlermeldung erreichen kann ?

Auf dem Großrechner mußte vor dem GOBACK nur folgende Anweisung durchgeführt werden: MOVE 12 to RETURN-CODE

Leider kennt das COBOL auf der i5 scheinbar keinen Return-Code, zumindest kann man diesen nicht explizit ansprechen.


Vorab vielen Dank für eure Hilfe und allen noch einen schönen Feierabend. :)

BenderD
19-03-09, 17:51
mit dem klein gedruckten von COBOL/400 bin ich nicht firm, aber da gibt es immer noch die Option mit QMHSNDPM eine Escape Message (z.B.: CPF9898, der man noch einen Text mitgeben kann) zu schicken.

D*B


Hallo zusammen,

ich habe folgendes COBOL-Problem:

innerhalb eines COBOL-Programmes mit embedded SQL fange ich SQL-Fehler durch folgende Anweisung ab:

EXEC SQL
WHENEVER SQLERROR GOTO UP-SQL-ERROR
END-EXEC

UP-SQL-ERROR Section holt sich aus der SQLCA gewisse Informationen, schreibt diese in eine Protokolltabelle und mach dann einen GOBACK.

Allerdings wäre es Wartungsfreundlicher, wenn das Programm nicht wie in diesem Falle fehlerfrei beendet werdeb würde, sondern das Programm mit einer Fehlermeldung abbricht.

In der COBOL-Reference habe ich den STOP literal - Befehl gefunden. Leider hält dieser das Programm nur an und schreibt eine Message in die Nachrichtendatei *SYSOPR.

Idealerweise wäre aber eine sofortige Beendigung des Programmes mit einer Fehlernachricht.

Kenn jemand eine COBOL-Anweisung, mit der ich einen Abbruch des Programmes mit einer Fehlermeldung erreichen kann ?

Auf dem Großrechner mußte vor dem GOBACK nur folgende Anweisung durchgeführt werden: MOVE 12 to RETURN-CODE

Leider kennt das COBOL auf der i5 scheinbar keinen Return-Code, zumindest kann man diesen nicht explizit ansprechen.


Vorab vielen Dank für eure Hilfe und allen noch einen schönen Feierabend. :)

Fuerchau
19-03-09, 20:38
Whenever an implicit or explicit STOP RUN occurs, the Languages and Utilities return code is set to 0. Otherwise, it is set to 2. The RETURN-CODE register is copied to the user portion of the work control block. See the RTVJOBA and DSPJOB commands in the

CL Programming book for more information about return codes.


M.a.W: Der Return-Code ist im CLP per RTVJOBA abfragbar.
Ist der Aufrufer ein COBOL-Programm, kann dieses direkt auf den RETURN-CODE zugreifen.
Es wird kein Fehler ausgelöst.


QMHSNDPM ist nicht unbedingt eine Lösung, da eine ESC-Nachricht auch zu einer Nachricht führt, wenn sie nicht per MONMSG überwacht oder automatisch beantwortet wird.

BenderD
20-03-09, 06:58
... das ist doch genau das, was ich erreichen will: die aufrufende Funktion wird zu error handling gezwungen, sonst endet sie selber irregulär!
D*B




[SIZE=2]QMHSNDPM ist nicht unbedingt eine Lösung, da eine ESC-Nachricht auch zu einer Nachricht führt, wenn sie nicht per MONMSG überwacht oder automatisch beantwortet wird.

[/LEFT]