COBOL - Sottoprogrammi

La subroutine Cobol è un programma che può essere compilato indipendentemente ma non può essere eseguito indipendentemente. Esistono due tipi di subroutine:internal subroutines piace Perform dichiarazioni e external subroutine come il verbo CALL.

Call Verb

Il verbo Call viene utilizzato per trasferire il controllo da un programma a un altro programma. Il programma che contiene il verbo CALL è ilCalling Program e il programma chiamato è noto come Called Program. La chiamata all'esecuzione del programma si interromperà finché il programma chiamato non termina l'esecuzione. L'istruzione Exit Program viene utilizzata nel programma Called per trasferire nuovamente il controllo.

Chiamati vincoli di programma

Di seguito sono riportati i requisiti del programma chiamato:

  • Linkage sectiondeve essere definito nel programma chiamato. Consiste di elementi di dati passati nel programma. Gli elementi di dati non devono avere la clausola Value. La clausola PIC deve essere compatibile con le variabili passate attraverso il programma chiamante.

  • Procedure division using ha un elenco di variabili passate dal programma chiamante e l'ordine deve essere lo stesso menzionato nel verbo Call.

  • Exit programviene utilizzata nel programma chiamato per ritrasferire il controllo. Deve essere l'ultima istruzione nel programma chiamato.

I parametri possono essere passati da un programma all'altro in due modi:

  • Come riferimento
  • Per contenuto

Chiama per riferimento

Se i valori delle variabili nel programma chiamato vengono modificati, i loro nuovi valori si rifletteranno nel programma chiamante. SeBY la clausola non è specificata, quindi le variabili vengono sempre passate per riferimento.

Sintassi

Di seguito è riportata la sintassi per chiamare la subroutine per riferimento:

CALL sub-prog-name USING variable-1, variable-2.

Example

L'esempio seguente è il programma chiamante MAIN e UTIL è il programma chiamato -

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Chiamato programma

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL per eseguire il programma COBOL di cui sopra -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Quando compili ed esegui il programma sopra, produce il seguente risultato:

In Called Program
Student Id : 1111
Student Name : Tim

Chiama per contenuto

Se i valori delle variabili nel programma chiamato vengono modificati, i loro nuovi valori non si rifletteranno nel programma chiamante.

Sintassi

Di seguito è riportata la sintassi per chiamare la subroutine in base al contenuto:

CALL sub-prog-name USING 
BY CONTENT variable-1, BY CONTENT variable-2.

Example

L'esempio seguente è il programma chiamante MAIN e UTIL è il programma chiamato -

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Chiamato programma

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL per eseguire il programma COBOL di cui sopra -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Quando compili ed esegui il programma sopra, produce il seguente risultato:

In Called Program
Student Id : 1000
Student Name : Tim

Tipi di chiamata

Esistono due tipi di chiamate:

  • Static Callsi verifica quando un programma viene compilato con l'opzione del compilatore NODYNAM. Un programma chiamato statico viene caricato nella memoria in fase di compilazione.

  • Dynamic Callsi verifica quando un programma viene compilato con l'opzione del compilatore DYNAM e NODLL. Un programma chiamato dinamico viene caricato nella memoria in fase di esecuzione.