Hay tablas que por diversos motivos contienen datos numéricos inválidos, mayormente, producto de una mala copia (CPYF). Y al procesarlos el sistema nos muestra ese mensaje que ya todos conocemos: “Error de datos decimales.”
Si usas Rgp Ile podemos monitorear automáticamente dicha excepción en el momento de compilar el programa, colocando en el parámetro FIXNBR (Arreglar numérico) los valores *ZONED y *INPUTPACKED, con eso los datos numéricos no válidos se trataran como ceros.
La información que nos muestra el sistema respecto al registro con dato numérico inválido es el número de registro relativo del archivo. Esto lo podemos obtener visualizando el trabajo, ya sea interactivo o por lotes, con la opción 14 del comando DSPJOB .
DSPJOB JOB(866190/MIUSUARIO/QPADEV004K)
Visualizar Trabajo Sistema: PUB1 Trabajo: QPADEV004K Usuario: MIUSUARIO Número: 866190 Seleccione una de las opciones siguientes: 1. Visualizar atributos de estado de trabajo 2. Visualizar atributos de definición de trabajo 3. Visualizar atributos de ejecución de trabajo, si está activo 4. Visualizar archivos en spool 10. Visualizar anotaciones trabajo, si está activo o en cola de trabajos 11. Visualizar pila de llamadas, si está activo 12. Visualizar bloqueos, si está activo 13. Visualizar lista de bibliotecas, si está activo 14. Visualizar archivos abiertos, si está activo 15. Visualizar alteraciones temporales de archivo, si está activo 16. Visualizar estado de control de compromiso, si está activo Más... Selección F3=Salir F12=Cancelar |
Esta opción nos permite visualizar los archivos que el sistema utiliza en dicho trabajo.
En la pantalla “Visualizar Archivos Abiertos” pulsando F11 (Visual. detalles E/S) podremos descubrir el numero relativo del registro que tiene problemas.
Visualizar Archivos Abiertos Trabajo : QPADEV004K Usuario : MIUSUARIO Número . . . : 866190 Número de vías de datos abiertas . . . . . . : 6 Miembro/ Formato Tipo Núm. -Abiertos-- Registro Archivo Bibliot. disposit. registro arch. E/S Opc Núm-cmp relativo QDSPMNU QSYS2931 QPADEV004K MENULY DSP 2 IO NO QDUODSPF QSYS2931 QPADEV004K MSGSFC DSP 500 IO NO QDDSPEXT QSYS2931 *N INQFMT DSP 161 IO NO ARCHIVO1 MIUSUARIO ARCHIVO1 REGFILE1 PHY 1 I NO 3 QDUI132 QSYS2931 QPADEV004K USRRCD DSP 4 IO NO QDDSPOF QSYS2931 QPADEV004K DETAIL2 DSP 16 IO NO Final Pulse Intro para continuar. F3=Salir F5=Renovar F11=Visual. datos ámbito F12=Cancelar F16=Menú trabajo |
Si estamos hablando de un archivo sin claves, el DFU nos permite ubicar el registro por numero relativo, pulsando la tecla F11. Luego colocamos el numero relativo del registro
*RECNBR: 3
Pero no podremos modificar el dato del registro, puesto que la información no podrá visualizarse en la pantalla, mostrandose el mensaje “El registro recuperado contiene datos no válidos.”
Yo utilizo la función RRN del SQL.
En nuestro ejemplo el error esta en el registro relativo 3, vamos al SQL y seleccionamos dicho registro de la siguiente manera:
SELECT * FROM MILIBRERIA/ARCHIVO1 WHERE RRN(ARCHIVO1) = 3
O si deseamos podremos ver todos los registros y a la vez el numero relativo al que pertenecen.
SELECT RRN(ARCHIVO1), CAMPO1, CAMPO2, CAMPO3 FROM MIUSUARIO/ARCHIVO1
Si se tratase de un archivo que contiene varios datos numéricos, con esta función podrás identificar que dato presenta el problema. ....+....1....+....2....+....3....+....4....+....5....+....6.... RRN ( ARCHIVO1 ) CAMPO1 CAMPO2 CAMPO3 1 111 CRISTIAN 150.00 2 222 SERGIO 56.22 3 100 01FISICOQUIMICA +++++++++++++++++ 4 100 02FISICA IV +++++++++++++++++ 5 100 03BIOLOGIA +++++++++++++++++ ******** Fin de datos ******** |
Luego de identificar el problema puedes utilizar un poderoso UPDATE para modificar el dato con el valor correcto. Por ejemplo:
UPDATE MIUSUARIO/ARCHIVO1 SET CAMPO3 = 50.25 WHERE RRN(ARCHIVO1) = 3
Esta función es muy útil, no solo para detectar inconsistencia de información sino para el manejo de la información de los archivos. Espero te sirva de mucha utilidad. Nos vemos.