Foro de Cobol
Registrate en el Foro de Cobol y Aporta tus experiencias y conocimientos sobre este lenguaje de programacion, con tu ayuda el foro crecera y todos nos podremos beneficiar de los conocimientos de los demas.

Gracias por entrar a COBOLEROS.ES
Síguenos en Twitter

2.3.- PARÁMETRO COND.

Ver el tema anterior Ver el tema siguiente Ir abajo

2.3.- PARÁMETRO COND.

Mensaje por Coboler@ el Jue Mayo 05, 2011 12:36 am

Poner la sentencia COND en las fichas EXEC y ponerla además en la ficha JOB se utiliza cuando hay muchos pasos que se tienen que ejecutar con las mismas condiciones (condición de ficha JOB) y sólo algunos pasos necesitan además otras condiciones particulares (condiciones de ficha EXEC). Cuando se produzca la condición de la ficha JOB ya no se ejecuta ningún otro paso de la cadena, independientemente de que COND tenga a nivel de paso.

COND=EVEN : el paso es ejecutado incluso si uno o más pasos anteriores han terminado anormalmente. Esto es, este paso siempre se ejecuta, terminen el resto de pasos anteriores bien o mal.

COND=ONLY : el paso es ejecutado sólo si uno o más pasos anteriores han terminado anormalmente. Esto es, este paso no se ejecutará, a menos que un paso precedente haya terminado anormalmente.

Notas sobre EVEN y ONLY :

EVEN y ONLY son ignorados si un paso termina anormalmente porque se ha excedido el tiempo límite del job .
Atención si existe un paso anterior que cree un fichero que necesite el paso del EVEN o ONLY ya que si ha terminado mal, el fichero no existirá cuando se ejecute este paso.
Cuando termina con ABEND por ejemplo por alocación de espacio o por error de JCL busca si hay algún paso con EVEN o ONLY para ejecutarlos y pasa del resto de los pasos independientemente de lo que tengan en COND.


Se lee :

¿Es “código de retorno de condición” operador “código de retorno paso anterior?

Si la respuesta es NO, el paso se ejecutará.


EJEMPLO 1:

//J11 JOB , ‘CHARO’, COND=((10,GT),(20,LT))


Se leería si 10 es mayor que el código de retorno o 20 es menor que el código de retorno no se ejecutará la cadena.
Si un paso devuelve un código de retorno 12 se ejecuta porque se cumplen ambas condiciones.
Si un paso devuelve un código de retorno 25 no se ejecuta porque cumple la primera condición, pero no la segunda.


//J12 JOB , ‘CHARO’, COND=(8,NE)

Se leería si 8 es distinto del código de retorno no se ejecutará la cadena.
Si un paso devuelve un código de retorno 8 se ejecuta.
Si un paso devuelve un código de retorno distinto de 8 no se ejecuta.


//J13 JOB , ‘CHARO’,COND=((5,GT),(8,EQ),(12,EQ),(17,EQ),
// (19,EQ),(21,EQ),(23,LE))


El job sólo se ejecutará si los códigos de retorno son : 5, 6, 7, 9, 10, 11, 13, 14, 15, 16, 18, 20, o 22.


//J14 EXEC PGM=U, COND=((20,GT,PASO01),(60,EQ,PASO02))

Se leería no ejecutes el paso si 20 es mayor que el código de retorno del paso PASO01 o si el PASO02 ha terminado con 60.


//J15 EXEC PGM=U, COND=((20,GT,PASO01),(60,EQ))

Se leería no ejecutes el paso si 20 es mayor que el código de retorno del paso PASO01 o si algún paso ha terminado con 60.


//J16 EXEC PGM=U, COND=(7,LT,PASO04.LINK)

Se leería no ejecutes el paso si 7 es menor que el código de retorno del paso PASO04 del procedimiento LINK.


//J17 EXEC PGM=U, COND=((10,LT,PASO01),(20,EQ),ONLY)

Se leería ejecuta este paso sólo si uno de los anteriores ha terminado mal, pero no lo ejecutes si 10 es menor que el código de retorno del paso PASO01 o si algún paso ha terminado con 20.

//J18 EXEC PGM=U, COND=((10,LT,PASO01),(20,EQ),EVEN)

Se leería ejecuta este paso incluso si uno de los anteriores ha terminado mal, pero no lo ejecutes si 10 es menor que el código de retorno del paso PASO01 o si algún paso ha terminado con 20.


EJEMPLO 2:

//J3 JOB , ‘CHARO’, COND=(10,LT)

//PASO01 EXEC PGM=A

devuelve un código de retorno 6.

1) compara el 6 con COND de ficha JOB: ¿es 10 menor que 6?. No
2) compara el 6 con COND de ficha EXEC: ¿es 2 igual a 6? O ¿4 igual a 6?. No
3) ejecuta el paso PASO02.

//PASO02 EXEC PGM=B,COND=((2,EQ),(4,EQ))
devuelve un código de retorno 2.

1) ¿es 10 menor que 2 o 6?. No
2) ¿Hay uno o más pasos anteriores que han terminado mal?. No.
3) No se ejecuta el paso PASO03.

//PASO03 EXEC PGM=C,COND=ONLY
al no ejecutarse no devuelve código de retorno.

1) ¿es 10 menor que 2 o 6?. No.
2) ¿es 5 mayor que 6 ?. No.
3) ¿alguno de los códigos precedentes es igual a 2?. Sí.
4) No se ejecuta el paso PASO04.

//PASO04 EXEC PGM=D,COND=((5,GT,PASO01)),(2,EQ))
al no ejecutarse no devuelve código de retorno.

1) ¿es 10 menor que 2 o 6?. No.
2) Se ejecuta el paso PASO05.

//PASO05 EXEC PGM=E
devuelve un código de retorno 9.

1) ¿es 10 menor que 2 o 6 o 9?. No
2) ¿es 8 mayor que 9?. No.
3) ¿alguno de los pasos anteriores ha terminado anormalmente?. No
4) Se ejecuta el paso PASO06

//PASO06 EXEC PGM=F,COND=((8,GT,PASO05),EVEN)
devuelve un código de retorno 10.

1) ¿es 10 menor que 2, 6, 9 o 10?. No.
2) ¿es 4 mayor que xxxx (al no procesarse el paso PASO04 esta condición se ignora).?
3) Se ejecuta el paso PASO07.

//PASO07 EXEC PGM=G,COND=(4,GT,PASO04)
devuelve un código de retorno 12.
1) ¿es 10 menor que 2, 6, 9, 10 o 12?. SÍ.
2) Ya no sigue ejecutándose el JOB independientemente de lo que haya a continuación.

//PASO08 EXEC PGM=H
no se ejecuta.

//PASO09 EXEC PGM=I,COND=ONLY
no se ejecuta.


EJEMPLO 3:

//J4 JOB , ‘CHARO’, COND=(5,EQ)

//PASO01 EXEC PGM=A
devuelve un código de retorno 4.

1) ¿es 5 igual a 4?. No
2) ¿es 7 menor que 4?. No
3) ejecuta el paso PASO02.

//PASO02 EXEC PGM=B,COND=(7,LT)
devuelve un código de retorno de ABEND.

1) ¿PASO03 es EVEN o ONLY?. Sí
2) ¿es 5 igual a 4?. No.
3) ¿es 20 mayor que 4?. Sí.
4) No se ejecuta el paso PASO03.

//PASO03 EXEC PGM=C,COND=((20,GT,PASO01),EVEN)
al no ejecutarse no devuelve código de retorno.

1) ¿PASO04 es EVEN o ONLY?. Sí.
2) ¿es 5 igual a 4 ?. No.
3) ¿alguno de los códigos precedentes es igual a 3?. No.
4) Se ejecuta el paso PASO04.

//PASO04 EXEC PGM=D,COND=((3,EQ),ONLY)
devuelve un código de retorno 6.

1) ¿PASO05 es EVEN o ONLY?. No.
2) No se ejecuta el paso PASO05.

//PASO05 EXEC PGM=E COND=(2,LT,PASO03)
al no ejecutarse no devuelve código de retorno.

1) ¿PASO06 es EVEN o ONLY?. No
2) No se ejecuta el paso PASO06.

//PASO06 EXEC PGM=F
al no ejecutarse no devuelve código de retorno.

1) ¿PASO07 es EVEN o ONLY?. Sí.
2) ¿es 5 igual a 4 o 6?. No.
3) ¿es 6 igual a xxxx?. No se mira.
4) Se ejecuta el paso PASO07.

//PASO07 EXEC PGM=G,COND=((6,EQ,PASO05), ONLY)
devuelve un código de retorno 5.
1) ¿es 5 igual a 5, 6 o 5?. SÍ.
2) Ya no sigue ejecutándose el JOB independientemente de lo que haya a continuación.

//PASO08 EXEC PGM=H COND=EVEN
no se ejecuta.

//PASO09 EXEC PGM=I
no se ejecuta.


Paso de COND como parámetro a los procedimientos.

//TEST EXEC PROC=PROC4,COND.PASO04=((7,LT,PASO01),
// (5,EQ),EVEN),COND.PASO06=((2,EQ),(10,GT,PASO04))


Así la sentencia EXEC que llama al procedimiento PROC4 pasa parámetros COND a dos pasos: al PASO04 y al PASO06.

//TEST EXEC PROC=MYPROC,COND=((7,LT,PASO01),(5,EQ))

Así en la ficha EXEC que manda ejecutar el procedimiento manda parámetros de COND para todos los pasos del procedimiento. Esto machacará cualquier condición COND que haya codificada en el procedimiento.
avatar
Coboler@
Admin

Mensajes : 215
Reputación : 19
Fecha de inscripción : 02/02/2011
Edad : 37
Localización : Madrid

Ver perfil de usuario http://www.coboleros.es

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.