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