Numerar registros y añadir contador en un Sort

Numerar registros Al procesar un fichero, muchas veces surge la necesidad de numerar los registros. Es decir, incluir un en cada registro un número secuencial que identifique la posición del mismo en el fichero. Con DFSORT podemos hacerlo incluyendo el operador SEQNUM al construir un registro mediante BUILD/INREC/OUTREC. SEQNUM permite indicar la longitud y el…

Niveles de aislamiento en DB2

Cuando varias transacciones DB2 se ejecutan simultáneamente, pueden darse los problemas que se detallan a continuación: Actualizaciones perdidas: se producen cuando dos transacciones leen los mismos datos e intentan actualizarlos a la vez, lo que provoca que una de los dos actualizaciones se pierda. Por ejemplo: las transacciones A y B leen la misma fila…

JCL: Crear fichero de entrada/salida cuando no exista

En un artículo anterior veíamos la forma de evitar el fallo de un JCL por la inexistencia de un fichero. Se trataba de crear un paso IDCAMS LISTCAT para generar un retorno 0 en caso de encontrar el fichero y 4 en caso contrario. Esto nos permitía condicionar el resto de pasos al código de…

Tipos de join en DB2

Un join en SQL es una consulta en la que se combinan dos tablas relacionadas mediante una cláusula WHERE en la que intervienen uno o más campos comunes entre ambas. El resultado depende del tipo de join elegido y puede incluir filas nulas si la condición no se cumple para alguna de las tablas. Siendo…

Recuperar la copia de seguridad de un dataset

Si borramos por error una dataset de z/OS (fichero o librería), podemos recuperar su copia de seguridad  mediante el comando HRECOVER de TSO. Como cualquier comando TSO, podemos introducirlo bien en la línea de comandos de cualquier panel ISPF, bien en el panel Command (opción 6 del panel principal de ISPF). Sintaxis: HRECOVER dataset borrado…

Búsquedas en tablas de COBOL

En este artículo vamos a analizar las diferentes formas que ofrece COBOL de hacer búsquedas en tablas Recordemos que una tabla es cualquier variable definida con más de una ocurrencia o que pertenece a un grupo de nivel superior con más de una ocurrencia. Por ejemplo, supongamos una tabla que almacene nombres de personas definida así: 01 TABLA….

Más de un registro de salida por cada registro de entrada en un Sort

En la definición de los registros de salida de un sort con BUILD se puede incluir una barra (carácter “/”) para insertar un registro en blanco. Los campos y/o literales que se incluyan a continuación formarán parte del nuevo registro. Por defecto se inserta un único registro. Si añadimos un número delante de la barra,…

FETCH FIRST n ROWS ONLY y OPTIMIZE FOR n ROWS

Las cláusulas OPTIMIZE FOR n ROWS y FETCH FIRST n ROWS ONLY de DB2 permiten optimizar una SELECT indicándole al DB2 el número de filas (n) que estimamos se van a obtener. La diferencia entre ambas es que con OPTIMIZE FOR se recuperan todas las filas que cumplan la condición de la SELECT y con…

Crear informes con un Sort

En este artículo vamos a introducir las sentencias de control del parámetro OUTFIL del Sort que permiten generar un fichero de salida con formato de informe. Las principales son: HEADER1 Cabecera general del informe. HEADER2 Cabecera de página. HEADER3 Cabecera de sección. TRAILER1 Pie final del informe TRAILER2 Pie de página. TRAILER3 Pie de sección….

Comprobar si un fichero está vacío con un Sort

En un Sort es posible forzar un código de retorno determinado (0, 4 u 8) si el SORTOUT (fichero de salida) no tiene registros. Se hace mediante la opción NULLOUT = RCn, donde n puede tomar el valor 0, 4 u 8 (el valor por defecto es 0). Gracias a esta utilidad podemos construir un…