lunes, 14 de marzo de 2011

JCL Básico III: Sentencia EXEC

Sentencia EXEC


Determina el inicio de un paso de trabajo y el programa o procedimiento catalogado a ejecutar . El máximo de sentencias autorizado para un JOB es de 255
   //PASO001 EXEC PGM=NAMEPGM,REGION=10M,
   //    TIME=(30,00),COND=(0,NE),
   //     ACCT=(contabili.),DYNAMNBR=10,
   //     PARM=("DESCRIPCON"),RD=NC,
   //     ADDRSPC=REAL


Sentencia que indica el programa o procedimiento que se desea ejecutar.
  • Parametros Posicionales. Se considera parámetro posicional de la sentencia EXEC la especificación del nombre del programa o procedimiento a ejecutar:
    • PGM=Nombre_del_programa. Se aplica cuando el paso deberá ejecutar un programa, asociando el nombre del  programa a ejecutar.
    • PROC=Se aplica cuando el paso deberá ejecutar un procedimiento, asociando el nombre del  procedimiento a ejecutar.
  • Parametros de Palabra Clave. A diferencia de los parámetros PROC y PGM que decíamos que había de ser uno de los dos el primero en codificarse en la ficha EXEC los restantes pueden codificarse en cualquier orden  (Todos ellos son opcionales):
    • ACCT - especifica la información contable relativa al paso, exigida por la instalación.
    • ADDRSPC Especifica si debemos ejecutar el paso en memoria real o virtual 
    • COND  especifica bajo qué condiciones no se ejecutará el paso.Tiene algunas peculiaridades que no se aplican en la sentencia JOB y son:


      COND=
      {
      (0,EQ)
      (0,EQ,PAS01)
      }


      COND=
      {
      EVEN
      ONLY
      }






      ONLY - 
      Solo se ejecuta si alguno de los pasos anteriores finalizase de manera incorrecta.

      EVEN - 
      El paso se ha de ejecutar siempre, aunque los anteriores acaben de forma incorrecta
    • //PRUEBA1  JOB  PPPPP,’J.MIR’,MSGCLASS=V,CLASS=C,
      //                  NOTIFY=T515214
      //*
      //PAS01      EXEC PROC=AAAP000...
      //PAS02      EXEC PROC=FINMALO,COND=(0,EQ,PAS01),....
      //PAS03      EXEC PROC=FINMALO,COND=ONLY,...
      //PAS04      EXEC PROC=SIFIN,COND=EVEN,...
    • DPRTY Determina la prioridad de ejecución del JOB en relación a otros en cola de ejecución.  El parámetro consta de dos subparámetros posicionales numéricos, el primero con valores comprendidos entre 0 y 14 y el segundo entre 0 y 15. La prioridad final se obtiene del producto de 16x (valor 1)+(valor 2)

      //TRAB1   JOB    DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214,
      //                            DPRTY =(10,5),...
      SE RECOMIENDA NO UTILIZAR ESTE PARÁMETRO A NO SER POR CAUSAS JUSTIFICADAS Y ACEPTAR LA PRIORIDAD QUE ASIGNA EL JES 2 PARA PRIORIDADES SEGÚN LAS CLASES DE EJECUCIÓN.           
      EL PARÁMETRO PRTY PARA LA FICHA JOB ES EL EQUIVALENTE A ESTE Y SU CODIFICACIÓN ANULA LA DE LA FICHA EXEC.

    • DYNAMNBR - éste parámetro está asociado con la alocación dinámica de ficheros y no se debe codificar en otras circunstancias. Alocación dinámica es aquella que efectuamos por medio del programa en ejecución que marca la pauta de qué ficheros debe, o no, coger o crear . Cada fichero a crear será una unidad de asignación al parámetro. Debe de asociarse el paso al parámetro para que el JOB sepa en qué momento debe de reservar recursos para la asignación dinámica de ficheros. El número máximo de ficheros a poder asignar de forma dinámica es de 1635.
      //TRAB1   JOB    DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214
      //*
      //PAS01    EXE  PGM=AAAP000,DYNAMNBR=10,...

      La alocación dinámica suele especificarse en la sentencia EXEC o por medio de una DD (dynam).
      Este parámetro tiene equivalencia al de igual nombre para la ficha JOB.(la codificación del parámetro en JOB anula la especificada en EXEC).
    • PARM - se utiliza para pasar algun tipo de información al programa que está en proceso. Se pueden pasar como máximo 100 caracteres.
    • //TRAB1   JOB    DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214
      //*
      //PAS01    EXEC    PGM=AAAP000,PARM=‘/ &CADENA’
      CODIFICACIÓN EN PGM PL/I DE RECEPCIÓN DE PARÁMETROS:
      AAAP000:  PROC (PARM) OPTIONS(MAIN)
      DCL PARM CHAR (100) VAR;
      DCL 1 WPARM           BASED(ADDR(PARM)),
            3 LONGIT        BIN FIXED(15),   
            3 CADENA        CHAR(8);
    • PERFORM Grupo de rendimiento al que se aplica al paso
      PERFORM=numero con valores comprendidos entre 1 y 255. Por defecto asume 1 para pasos de JOB no TSO y 2 para JOBs de TSO
      //TRAB1   JOB    DEPEXT,PUIG,MSGCLASS=V,CLASS=C,
      //                            PERFORM=2
    • RD - controla las posibilidades de rearranque del paso en el que esta codificado.

      • RD=R Rearranque automático combinado con la macro CHKPT
      • RD=RNC Rearranque automático a nivel de paso (no de checkpoint)
      • RD=NC No se permiten rearranques automáticos
      • RD=NR No permite arranque automático, pero se puede tomar checkpoint para el arranque posterior

    • REGION - especifica la cantidad de memoria que puede utilizar el paso.
      En el caso de trabajar con memoria real ADDRSPC=REAL indica el total de memoria a utilizar
      En el caso de trabajar con memoria virtual ADDRSPC=VIRT evita el exceso de paginación cuando se codifican valores bajos
      La medida se expresa en valor superior a cero en número par y como unidad K(1024 octetos)
      //TRAB1   JOB    DEPEXT,PUIG,MSGCLASS=V,CLASS=C,NOTIFY=T515214
      //*
      //PAS01     EXEC  PGM=AAAP000,REGION=1024K

    • TIME - Especifica el tiempo máximo de CPU(tiempo en que el procesador utiliza recursos)  autorizado para la ejecución del  paso.

      TIME=([minutos|),[segundos|)

      Ambos requieren valores numéricos el primero en rango comprendido entre 1y 1439 y el segundo con valor entre 1 y 59 .Ejemplos TIME=1, TIME=(1,20), TIME=(,40)
      Time=1440 (24 horas) presupone que no hay limite de CPU para ese JOB              

      Para indicar 15 segundos:
      //TRAB1   JOB    DEPEXT,PUIG,MSGCLASS=V,CLASS=C
      //*
      //PAS01     EXEC  PGM=AAAP000,TIME=(,15)
      La ausencia de codificación de este parámetro presupone el trabajar con el tiempo limitado por la instalación.

3 comentarios:

Alvarito dijo...

Se me olvidó comentar, en el parámetro PARM la utilidad DYNALLOC.

Se usa del siguiente modo:
PARM=('DYNALLOC=(SYSALLDA,32)') --> Cantidad de memoria que se da a la ejecución del paso. Si se queda corto, aumentarla en valores de 8,12,32,64,128, 256 (como las memorias RAM)

José Vargas dijo...

Muy bueno el post, pero desearía encontrar ejemplos mas completos y prácticos, en donde estén tanto jcl y cobol, muchas gracias por la info

Tallian dijo...

Hola Jose.
En la sección de "Principiantes Cobol" puedes encontrar ejemplos de jobs que ejecutan programas cobol.
http://www.consultoriocobol.com/2011/01/principiantes-cobol.html

Un saludo!