lunes, 31 de enero de 2011

Número Relativo en SQL 400 ((Monitorear Error de Datos Decimales)

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  

....+....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  ********                                     
                                                                     
Si se tratase de un archivo que contiene varios datos numéricos, con esta función podrás identificar que dato presenta el problema.
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.

1 comentario:

  1. Muy bueno, gracias. No sabia que se podía usar el RRN en SQL

    ResponderEliminar