COBOL GOBACK Statement
GOBACK statement specifies the logical end of a program and gives the control back from where it was received.
Syntax -
GOBACK.Points to Note -
- It should be the last statement in PROCEDURE DIVISION.
- It can code in both the main program and sub-program.
- It works like the EXIT PROGRAM statement when coded in a subprogram
- It works like the STOP RUN statement when it is coded in a mainprogram.
Practical Example -
Scenario - Dynamic Call from MAINPROG to SUBPROG and receiving the result back from SUBPROG.
MAINPROG -
----+----1----+----2----+----3----+----4----+----5----+
       ...
       WORKING-STORAGE SECTION.
       01 WS-VAR.
          05 WS-INP1      PIC 9(02) VALUE 47. *> Input1
          05 WS-INP2      PIC 9(02) VALUE 25. *> Input2
          05 WS-RESULT    PIC 9(04).          *> Result Variable
		  05 WS-SUBPROG   PIC X908) VALUE 'SUBPROG'.
       ...
	   PROCEDURE DIVISION. 
	  * Calling subprogram staically with two inputs 
      * and receiving the result from SUBPROG
           CALL WS-SUBPROG USING WS-INP1, WS-INP2, WS-RESULT.
           DISPLAY "INPUTS:  " WS-INP1 ", " WS-INP2.
           DISPLAY "RESULTS: " WS-RESULT.
           STOP RUN. SUBPROG -
----+----1----+----2----+----3----+----4----+----5----+
       ...
       LINKAGE SECTION.
       01 LK-INP1      PIC 9(02).  *> To receive input1 from MAINPROG
       01 LK-INP2      PIC 9(02).  *> To receive input2 from MAINPROG
       01 LK-RESULT    PIC 9(04).  *> To send result to MAINPROG
       ...
	  *Receiving data from main program CALL statement
       PROCEDURE DIVISION USING LK-INP1, LK-INP2, LK-RESULT. 
           COMPUTE LK-RESULT = LK-INP1 * LK-INP2.
           GOBACK.JCL -
//MATEPKRJ JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID //*********************************************** //* RUN A COBOL PROGRAM //*********************************************** //STEP01 EXEC PGM=MAINPROG //STEPLIB DD DSN=MATEPK.COBOL.LOADLIB,DISP=SHR //SYSOUT DD SYSOUT=*
Output -
INPUTS: 47, 25 RESULTS: 1175
