COBOL - Subrutinas
La subrutina Cobol es un programa que se puede compilar de forma independiente pero no se puede ejecutar de forma independiente. Hay dos tipos de subrutinas:internal subroutines me gusta Perform declaraciones y external subrutinas como el verbo CALL.
Verbo de llamada
El verbo de llamada se utiliza para transferir el control de un programa a otro. El programa que contiene el verbo CALL es elCalling Program y el programa que se llama se conoce como Called Program. La ejecución del programa llamado se detendrá hasta que el programa llamado finalice la ejecución. La instrucción Salir del programa se utiliza en el programa Llamado para transferir el control de vuelta.
Restricciones del programa llamado
Los siguientes son los requisitos del programa llamado:
Linkage sectiondebe estar definido en el programa llamado. Consiste en elementos de datos pasados en el programa. Los elementos de datos no deben tener cláusula de valor. La cláusula PIC debe ser compatible con las variables pasadas a través del programa de llamada.
Procedure division using tiene una lista de variables pasadas desde el programa de llamada y el orden debe ser el mismo que se menciona en el verbo de llamada.
Exit programLa sentencia se utiliza en el programa llamado para transferir el control de vuelta. Debe ser la última sentencia del programa llamado.
Los parámetros se pueden pasar entre programas de dos formas:
- Por referencia
- Por contenido
Llamar por referencia
Si se modifican los valores de las variables en el programa llamado, entonces sus nuevos valores se reflejarán en el programa de llamada. SiBY no se especifica una cláusula, entonces las variables siempre se pasan por referencia.
Sintaxis
A continuación se muestra la sintaxis de llamar a la subrutina por referencia:
CALL sub-prog-name USING variable-1, variable-2.
Example
El siguiente ejemplo es el programa de llamada MAIN y UTIL es el programa llamado -
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.
Programa llamado
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 ejecutar el programa COBOL anterior -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
In Called Program
Student Id : 1111
Student Name : Tim
Llamar por contenido
Si se modifican los valores de las variables en el programa llamado, entonces sus nuevos valores no se reflejarán en el programa de llamada.
Sintaxis
A continuación se muestra la sintaxis de llamar a la subrutina por contenido:
CALL sub-prog-name USING
BY CONTENT variable-1, BY CONTENT variable-2.
Example
El siguiente ejemplo es el programa de llamada MAIN y UTIL es el programa llamado -
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.
Programa llamado
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 ejecutar el programa COBOL anterior -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
In Called Program
Student Id : 1000
Student Name : Tim
Tipos de llamada
Hay dos tipos de llamadas:
Static Callocurre cuando un programa se compila con la opción del compilador NODYNAM. Un programa llamado estático se carga en el almacenamiento durante la compilación.
Dynamic Callocurre cuando un programa se compila con la opción del compilador DYNAM y NODLL. Un programa llamado dinámico se carga en el almacenamiento en tiempo de ejecución.