PerroCobolero

PerroCobolero

ADS

jueves, 19 de mayo de 2016

Programas con DB2 III: COUNT, MAX y FOR UPDATE


SELECT COUNT:
Esta sentencia nos recuperará la cantidad de registros que cumplen una condición, es decir, lo que devuelve es un número.

EXEC SQL
   SELECT COUNT(*)
     INTO :NUMERO-REGISTROS :IND-NULL
     FROM TABLA1
    WHERE CAMPO1 = 'XX'
END-EXEC

La variable IND-NULL la definiremos como S9(4) COMP y la utilizaremos para controlar el retorno, en caso de que no encuentre nin
gún registro que cumpla la condición.

Controlando el SQLCODE:
EVALUATE TRUE
   WHEN SQLCODE EQUAL ZEROES
      IF IND-NULL EQUAL -1
         MOVE ZEROES TO NUMERO-REGISTROS
      END-IF
   WHEN OTHER
      DISPLAY 'ERROR HACIENDO EL SELECT COUNT. SQLCODE: 'SQLCODE
END-EVALUATE

El indicador de nulos para el caso de no encontrar ningún registro valdrá -1. Si no controlásemos el indicador de nulos, la SELECT nos devolvería un SQLCODE -305.


SELECT MAX:
Esta sentencia nos recuperará el valor máximo de un campo para una determinada condición.

EXEC SQL
   SELECT MAX(CAMPO2)
     INTO :TABLA1-CAMPO2 :IND-NULL
     FROM TABLA1
    WHERE CAMPO1 = 01
END-EXEC

El control del retorno se hará del mismo modo que para el SELECT COUNT:
EVALUATE TRUE
   WHEN SQLCODE EQUAL ZEROES
      IF IND-NULL EQUAL -1
         MOVE ZEROES TO TABLA1-CAMPO2
      END-IF
   WHEN OTHER
      DISPLAY 'ERROR HACIENDO EL SELECT COUNT. SQLCODE: 'SQLCODE
END-EVALUATE


FOR UPDATE:
Esta sentencia se utiliza para actualizar el registro en el que nos hemos posicionado con un FETCH.

EXEC SQL
   DECLARE CUR-TABLA1 CURSOR FOR
    SELECT
          CAMPO1,
          CAMPO2,
          CAMPO3,
          CAMPO4
      FROM TABLA1
     WHERE CAMPO1 = :TABLA1-CAMPO1
     FOR UPDATE OF
          CAMPO2,
          CAMPO3,
          CAMPO4
END-EXEC

En el programa haríamos un update por cada FETCH del siguiente modo:
EXEC SQL
   UPDATE TABLA1
     SET CAMPO2 = :UPD-CAMPO2,
         CAMPO3 = :UPD-CAMPO3,
         CAMPO4 = :UPD-CAMPO4
    WHERE CURRENT OF CUR-TABLA1
END-EXEC

No hay comentarios.:

Publicar un comentario