No sólo ha evolucionado el ser humano...sino también las armas:
Vistas de página en total
viernes, 2 de junio de 2017
viernes, 5 de mayo de 2017
Micro Focus impulsa la formación en Cobol
Debido a la gran carencia de profesionales cobol, Micro Focus está impulsando la formación este lenguaje de programación.
Si quieres leer más acerca de esta información, a continuación dejo el artículo completo: Artículo completo.
miércoles, 5 de abril de 2017
miércoles, 1 de marzo de 2017
Cobol - Inicializar variables numéricas a nueves
Solemos estar acostumbrados a inicializar variables numéricas en Cobol de la siguiente manera:
MOVE ZEROES TO WS-VAR-NUM
Y en todas sus vertientes:
MOVE ZEROS TO WS-VAR-NUM
MOVE 0 TO WS-VAR-NUM
Pero, ¿qué pasa cuándo queremos inicializarla con un valor distinto de 0 (por ejemplo, 9)? Si nuestro objetivo es inicializarla con nueves, sólo tenemos que hacer lo siguiente:
MOVE ALL '9' TO WS-VAR-NUM
Seguro que te choca ver '9' en lugar de 9, pero es así y me ha funcionado. Pruébalo tú y nos cuentas.
MOVE ZEROES TO WS-VAR-NUM
Y en todas sus vertientes:
MOVE ZEROS TO WS-VAR-NUM
MOVE 0 TO WS-VAR-NUM
Pero, ¿qué pasa cuándo queremos inicializarla con un valor distinto de 0 (por ejemplo, 9)? Si nuestro objetivo es inicializarla con nueves, sólo tenemos que hacer lo siguiente:
MOVE ALL '9' TO WS-VAR-NUM
Seguro que te choca ver '9' en lugar de 9, pero es así y me ha funcionado. Pruébalo tú y nos cuentas.
martes, 14 de febrero de 2017
viernes, 3 de febrero de 2017
Easytrieve
En http://www.consultoriocobol.com/p/y-mas.html encontrarás diferentes secciones y una de ellas está dedicada a easytrieve.
También he encontrado la entrada de un blog en donde se explica muy bien los conceptos básicos y necesarios del easytrieve. Pincha aquí para acceder a dicha entrada.
También he encontrado la entrada de un blog en donde se explica muy bien los conceptos básicos y necesarios del easytrieve. Pincha aquí para acceder a dicha entrada.
lunes, 9 de enero de 2017
martes, 3 de enero de 2017
viernes, 2 de diciembre de 2016
HOST - cómo tener un emulador HOST
Os dejo el siguiente link (http://www.hercules-390.eu/) en donde se explica como descargar y configurar un PC como emulador de HOST System/370,
ESA/390 y z/Architecture Emulator.
miércoles, 2 de noviembre de 2016
Cobol: Utilizar cursor en un programa
En ocasiones tenemos que utilizar cursores en los programas cobol. Así que en esta entrada aprenderemos a declarar y utilizar los cursores en un programa cobol.
La declaración de un cursor no es más que definir una SELECT a una tabla. Dicha consulta puede devolvernos 0, 1 o más filas; todo depende de si existe en la tabla alguna/s fila/s que cumpla/n o no la cláusula WHERE definida.
Lo primero de todo es definir el cursor en la WORKING-STORAGE SECTION del programa cobol tal y como se indica a continuación:
EXEC SQL
DECLARE CURSOR CUR_TABLA FOR
SELECT CAMPO1,
CAMPO2,
CAMPO3,
CAMPO4,
CAMPO5
FROM TABLA1
WHERE CAMPO1 = :TABLA1.CAMPO1
AND CAMPO2 > :TABLA1.CAMPO2
ORDER BY CAMPO1, CAMPO2
END-EXEC
También declararemos un switch:
01 SW-FIN-CURSOR.
05 SI-FIN-CURSOR PIC X(01) VALUE 'S'.
05 NO-FIN-CURSOR PIC X(01) VALUE 'N'.
Hay tres operaciones básicas que podemos hacer con un cursor:
- Apertura del cursor: OPEN <Nombre_del_cursor>
- Lectura del cursor: FETCH <Nombre_del_cursor>
- Cierre del cursor: CLOSE <Nombre_del_cursor>
En el programa existirán 3 párrafos que realizarán dichas operaciones:
APERTURA-CURSOR.
SET NO-FIN-CURSOR TO TRUE
MOVE ENT-CAMPO1 TO CAMPO1 OF TABLA1
MOVE ENT-CAMPO2 TO CAMPO2 OF TABLA1
EXEC SQL
OPEN CUR_TABLA
END-EXEC.
IF SQLCODE NOT EQUAL ZEROES
PERFORM FIN-ERR-DB2
END-IF.
LECTURA-CURSOR.
EXEC SQL
FETCH CUR_TABLA
INTO :TABLA.CAMPO1,
:TABLA.CAMPO2,
:TABLA.CAMPO3,
:TABLA.CAMPO4,
:TABLA.CAMPO5
END-EXEC.
EVALUATE SQLCODE
WHEN ZEROES
CONTINUE
WHEN +100
SET SI-FIN-CURSOR TO TRUE
WHEN OTHER
PERFORM FIN-ERR-DB2
END-EVALUATE.
CIERRE-CURSOR.
EXEC SQL
CLOSE CUR_TABLA
END-EXEC.
IF SQLCODE NOT EQUAL ZEROES
PERFORM FIN-ERR-DB2
END-IF.
Nota: ENT-CAMPO1 y ENT-CAMPO2 serán dos variables previamente declaradas en el programa cobol y tienen que ser del mismo tipo que las variables CAMPO1 y CAMPO2 de la tabla TABLA1. Ambas variables deberán contener algún valor válido (espacios o 'CAD' si son alfanuméricos, ceros o 59 si son numéricos, ect). También se podría haber asignado valores dichos valores directamente sin la utilización de variables auxiliares.
Cuando se realice el PROCESO en el programa cobol, tendremos algo como lo siguiente:
PERFORM APERTURA-CURSOR
PERFORM LECTURA-CURSOR
PERFORM TRATAMIENTO-CURSOR
UNTIL SI-FIN-CURSOR
PERFORM CIERRE-CURSOR
En el párrafo TRATAMIENTO-CURSOR se ejecutará el código que se tenga que ejecutar con el objetivo de tratar la información leída del cursor y por último se ejecutará una lectura del cursor. Es decir, tendríamos algo como lo siguiente:
TRATAMIENTO-CURSOR.
<<Sentencias>>
PERFORM LECTURA-CURSOR.
Esto ha sido todo, espero que te haya servido de ayuda.
viernes, 7 de octubre de 2016
viernes, 2 de septiembre de 2016
Jcl: Comprimir una librería
Podemos comprimir una librería de la siguiente manera:
1) Ir a la opción 3.4 del ISPF.
2) Aparece una pantalla en la que pondríamos la librería en cuestión. Pulsamos INTRO.
3) Tras pulsar nos situamos en una pantalla en la que aparece algo como:
----------------------------------------------------
<<librería-indicada>>
***********End of Data Set list***********
4) Estando ahí (en lo indicado en el punto 3), sólo tenemos que poner Z al lado del nombre de la librería. Pulsamos INTRO y ya tendríamos la librería comprimida.
Hasta aquí todo muy fácil pero podemos enfrentarnos al hecho de comprimir una librería en la que no podemos hacer esto debido a que si lo hacemos aparece un mensaje de error que nos dice lo siguiente: Data set in use. Pues bien, llegados a este punto, ¿qué haríamos? Muy fácil, ejecutar el siguiente jcl:
//XXXXXXXX JOB (20,000),'COMPRIMI',NOTIFY=XXXXXX,
// CLASS=T,MSGCLASS=X
//************** COMPRIMIR LIBRERIA *************************
//COMPRIM EXEC PGM=IEBCOPY,REGION=1024K
//SYSPRINT DD SYSOUT=*
//I DD DISP=SHR,DSN=EJEM.LIBR.COMP
//SYSUT3 DD SPACE=(CYL,(2,1))
//SYSUT4 DD SPACE=(CYL,(2,1))
//SYSIN DD *
COPY OUTDD=I,INDD=I
En el DSN pondríamos la librería a comprimir. En nuestro ejemplo, sería la librería EJEM.LIBR.COMPR
Si ejecutamos dicho jcl, terminaría correctamente y comprimiría la librería en cuestión.
viernes, 5 de agosto de 2016
Cobol: Utilizar cursor for update en un programa
En ocasiones tenemos que utilizar cursores en los programas cobol. En una entrada anterior ya vimos cómo se definían los cursores y cómo se manejaban (pinchar aquí para ver dicha entrada).
También existen los cursores FOR UPDATE. Estos cursores se utilizan cuando queremos seleccionar una serie de filas de una tabla y modificar la información contenida en dichas filas. Así que en esta entrada aprenderemos a declarar y utilizar los cursores for update en un programa cobol.
También existen los cursores FOR UPDATE. Estos cursores se utilizan cuando queremos seleccionar una serie de filas de una tabla y modificar la información contenida en dichas filas. Así que en esta entrada aprenderemos a declarar y utilizar los cursores for update en un programa cobol.
La declaración de un cursor no es más que definir una SELECT a una tabla. Dicha consulta puede devolvernos 0, 1 o más filas; todo depende de si existe en la tabla alguna/s fila/s que cumpla/n o no la cláusula WHERE definida.
Lo primero de todo es definir el cursor en la WORKING-STORAGE SECTION del programa cobol tal y como se indica a continuación:
EXEC SQL
DECLARE CURSOR CUR_TABLA FOR
SELECT CAMPO1,
CAMPO2,
CAMPO3,
CAMPO4
FROM TABLA1
WHERE CAMPO1 = :TABLA1.CAMPO1
FOR UPDATE OF CAMPO2, CAMPO3, CAMPO4
END-EXEC
También declararemos el mismo switch de la entrada anterior, es decir:
01 SW-FIN-CURSOR.
05 SI-FIN-CURSOR PIC X(01) VALUE 'S'.
05 NO-FIN-CURSOR PIC X(01) VALUE 'N'.
Se mantienen las tres operaciones básicas que vimos en la anterior entrada:
- Apertura del cursor: OPEN <Nombre_del_cursor>
- Lectura del cursor: FETCH <Nombre_del_cursor>
- Cierre del cursor: CLOSE <Nombre_del_cursor>
ACTUALIZACION-CURSOR.
EXEC SQL
UPDATE TABLA1
SET CAMPO2 = :UPD-CAMPO2,
CAMPO3 = :UPD-CAMPO3,
CAMPO3 = :UPD-CAMPO4
WHERE CURRENT OF CUR_TABLA
SET CAMPO2 = :UPD-CAMPO2,
CAMPO3 = :UPD-CAMPO3,
CAMPO3 = :UPD-CAMPO4
WHERE CURRENT OF CUR_TABLA
END-EXEC.
IF SQLCODE NOT EQUAL ZEROES
PERFORM FIN-ERR-DB2
END-IF.
Nota: UPD-CAMPO2, UPD-CAMPO3 y UPD-CAMPO4 serán variables previamente declaradas en el programa cobol. Tienen que ser del mismo tipo que los campos CAMPO2, CAMPO3 y CAMPO4 de la tabla TABLA1. Las mencionadas variables deberán contener algún valor válido (espacios o 'CAD' si son alfanuméricos, ceros o 59 si son numéricos, ect).
De este modo no tendríamos que indicarle al UPDATE la clave del registro a actualizar, pues actualizaría el registro recuperado por el FETCH.
De este modo no tendríamos que indicarle al UPDATE la clave del registro a actualizar, pues actualizaría el registro recuperado por el FETCH.
Cuando se realice el PROCESO en el programa cobol, tendremos algo como lo siguiente:
PERFORM APERTURA-CURSOR
PERFORM LECTURA-CURSOR
PERFORM TRATAMIENTO-CURSOR
UNTIL SI-FIN-CURSOR
PERFORM CIERRE-CURSOR
En el párrafo TRATAMIENTO-CURSOR se ejecutará el código que se tenga que ejecutar con el objetivo de tratar la información leída del cursor y por último se ejecutará una lectura del cursor. Es decir, tendríamos algo como lo siguiente:
TRATAMIENTO-CURSOR.
<<Sentencias>>
PERFORM ACTUALIZACION-CURSOR
PERFORM ACTUALIZACION-CURSOR
PERFORM LECTURA-CURSOR.
Esto ha sido todo, espero que te haya servido de ayuda.
viernes, 1 de julio de 2016
Suscribirse a:
Entradas (Atom)






