Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- REPAGINACION Y REPOSICIONAMIENTO
- REPOSICIONAMIENTO: relacionado con el batch (tiene que ir siempre en cualquier programa que use DB2 ¡SIEMPRE ORDENADO POR CLAVE PRIMARIA!)
- QUE ES: consiste en que un proceso batch que tiene un fichero de entrada con x registros a insertar en una tabla en la cual quiere insertar en un fichero, ira haciendo por cada registro un insert, en el supuesto caso de que llegue al 5 registro y haya un corte de luz
- solo se habran insertado en la tabla los 4 primeros registros, en el caso de que no hubiese un control del insert, al volver a ejecutar ese batch nos daria un error de registro duplicado ya que los cuatro primeros registros ya existian, por eso el programa con reposicionamiento sirve para "guardarse" cual es el ultimo registro tratado que ha modificado la tabla db2 (ya sea un insert,update, o delete) para releer los registros del fichero de entrada hasta llegar al ultimo que se ha tratado.
- El reposicionamiento utiliza una tabla con una estructura similar a esta:
- DAREPOS (o nombre tabla reposicionamiento)
- Nombre-programa pic x (8). => indica el programa donde se gestiona el repos.
- Estado pic x (2). => indica el estado (ok y ko).
- Reg varchar(1000). => se guarda el ultimo registro tratado.
- COMO INTEGRARLO EN UN PROGRAMA (ESQUEMA PRIMERA EXPLICACION)
- 1000-INICIO
- INICIALIZAR VARIABLES,COPYS,ETC
- 1100-ABRIR-FICHEROS
- 1200-GESTION-REPOSICIONAMIENTO (los corchetes indican que hay dentro del parrafo 1200) (preguntar a la tabla repos el estado de la ultima ejecucion del programa)
- {
- MOVE 'PGM1' to D-PGM
- EXEC SQL
- SELECT ESTADO, REG
- INTO :D-ESTADO
- :D-REG
- FROM TABLA
- WHERE PGM = :D-PGM
- END-EXEC
- EVALUATE SQLCODE
- WHEN 0
- EVALUATE D-ESTADO
- WHEN 'OK'
- PERFORM LEER-FICHERO-ENTRADA
- WHEN 'KO'
- PERFORM LEER-FICHERO-ENTRADA UNTIL CLAVE-FICH-ENTRADA > D-REG
- WHEN OTHER
- SET KO-TECNICO TO TRUE
- PERFORM 3000-FIN
- END-EVALUATE
- WHEN 100 (SIGNIFICA QUE ESTE PROGRAMA NUNCA SE HA EJECUTADO)
- MOVE 'OK' TO D-ESTADO
- EXEC SQL
- INSERT INTO TABLA
- VALUES (:D-PGM,:D-ESTADO)
- END-EXEC
- EVALUATE SQLCODE
- WHEN 0
- PERFORM LEER-FICHERO-ENTRADA
- WHEN -803
- SET KO-TECNICO TO TRUE
- PERFORM 3000-FIN
- END-EVALUATE
- END-EVALUATE
- }
- .
- .
- .
- 2000-PROCESO
- 2100-LLAMAR-RUTINA-DELETE (los corchetes indican que hay dentro del parrafo 2100)
- {
- MOVER CAMPOS FICHERO ENTRADA A COPY DE RUTINA (AL SER UN DELETE SOLO SERIA LA ID)
- CALL RUTINA-DELETE USING 01-COPY-RUTINA
- EVALUATE RETORNO-COPY-RUTINA
- EXEC SQL
- COMMIT (SIRVE PARA CONFIRMAR LOS CAMBIOS REALIZADOS EN LA TABLA DB2)
- END-EXEC (NO HACE FALTA EVALUAR SQL AL HACER UN COMMIT)
- }
- 2200-ACTUALIZAR-DAREPOS (LA TABLA QUE CONTROLA REPOSICIONAMIENTO) (los corchetes indican que hay dentro del parrafo 2200)
- {
- MOVE 'KO' TO D-ESTADO
- MOVE CLAVE-FICHERO TO D-REG
- EXEC SQL
- UPDATE TABLA
- SET ESTADO = :D-ESTADO
- REG = :D-REG
- WHERE PGM = :D-PGM
- END-EXEC
- PERFORM LEER-FICHERO-ENTRADA
- }
- .
- .
- .
- 3000-FIN
- PERFORM CERRAR-FICHEROS
- PERFORM ESTADISTICAS
- IF FIN-FICHERO
- MOVE OK TO D-ESTADO
- INITIALIZE D-REG
- EXEC SQL
- UPDATE TABLA
- SET ESTADO = :D-ESTADO
- REG = :D-REG
- WHERE PGM = :D-PGM
- END-EXEC
- EVALUATE SQLCODE
- END-IF
- -----------------------------------------------------------------------------------------------
- EJECRICIO:
- Borrar de la tabla medicos los medicos que vengan en un fichero de entrada
- REPAGINACION: esta relacionada con el online (EN EL PROXIMO CAPITULO)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement