Em Cobol subrotina é um programa que pode ser compilado independente mas não pode ser executado independentemente. Há dois tipos de sub-rotinas: interno sub-rotinas como executar as declarações e externas CHAMADAS subrotinas como verbo.
Chamada verbo é utilizado para transferir o controle de um programa para outro programa. O programa que contém o verbo é chamada a chamada Programa e o programa a ser chamado é conhecido como o chamado Programa. Programa chamada execução irá parar até que o chamado programa termina a execução. Sair do Programa declaração é usada no chamado programa de transferir o controle para trás.
Seguem-se os chamados requisitos do programa:
Articulação seção devem ser definidos no chamado programa. É composto de elementos de dados transmitidos no programa. Os itens de dados não deve ter valor cláusula. PIC cláusula deve ser compatível com as variáveis passadas através do chamado programa.
Procedimento divisão usando possui uma lista de variáveis passadas do programa e pedir a encomenda deve ser mesmo mencionado no convite verbo.
Sair do programa declaração é usada no chamado programa de transferir o controle para trás. Ela deve ser a última declaração do chamado programa.
Os parâmetros podem ser passados entre programas de duas maneiras:
Se os valores das variáveis no chamado programa são alteradas, em seguida, seus novos valores irão refletir no chamado programa. Se a cláusula não é especificado, então, as variáveis são sempre passados por referência.
Sintaxe é a seguinte rotina de chamadas por referência:
CALL sub-prog-name USING variable-1, variable-2.
Exemplo A seguir é a chamada PRINCIPAL programa e UTIL é o chamado programa:
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.
Denominado Programa
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 para executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=MAIN
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
In Called Program Student Id : 1111 Student Name : Tim
Se os valores das variáveis no chamado programa são alteradas, em seguida, os novos valores não irão refletir na chamada do programa.
Sintaxe é a seguinte rotina de chamadas por conteúdo:
CALL sub-prog-name USING BY CONTENT variable-1, BY CONTENT variable-2.
Exemplo A seguir é a chamada PRINCIPAL programa e UTIL é o chamado programa:
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.
Denominado Programa
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 para executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=MAIN
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
In Called Program Student Id : 1000 Student Name : Tim
Há dois tipos de chamadas.
Chamada estática ocorre quando um programa é compilado com a opção de compilação NODYNAM. A static chamado programa é carregado no armazenamento em tempo de compilação.
Chamada dinâmica ocorre quando um programa é compilado com o compilador NODLL e DYNAM opção. Uma dinâmica denominada programa é carregado no armazenamento em runtime.