La forma de declararlos es muy sencilla:
DECLARE myCursor CURSOR FROM
SELECT * FROM tabla
WHERE condiciones
Es decir, definimos un CURSOR con el nombre que queramos (myCursor en el ejemplo) asociado a una query que nos aportará los datos que necesitamos.
Existen dos formas distintas de abrir el cursor y empezar a explotar la informacion aportada:
* Uso de FOREACH:
DEFINE datosCliente RECORD LIKE clientes.*
DECLARE myCursor CURSOR FOR
SELECT * FROM clientes
WHERE condiciones
FOREACH myCursor INTO datosCliente
---
---
---
END FOREACH
FREE myCursor
* Uso de OPEN - CLOSE
DEFINE datosCliente RECORD LIKE clientes.*
DECLARE myCursor CURSOR FOR
SELECT * FROM clientes
WHERE condiciones
OPEN myCursor
FETCH myCursor INTO datosCliente
IF STATUS = 0 THEN
WHILE TRUE
---
---
---
FETCH myCursor INTO datosCliente
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
END WHILE
END IF
CLOSE myCursor
FREE myCursor
No hay diferencias en cuanto al uso de uno u otro método, pero yo recomiendo usar OPEN - CLOSE para realizar REPORTS por una razón muy sencilla, al realizar el primer FETCH podemos averiguar si el cursor nos va a devolver alguna información. De esta forma podemos hacer el START REPORT seguros de que al menos va a tener una linea.
DECLARE myCursor CURSOR FOR
SELECT * FROM clientes
WHERE condiciones
OPEN myCursor
FETCH myCursor INTO datosCliente
IF STATUS = 0 THEN
##
## Inicio el Report cuando sé que va a tener contenido
##
START REPORT myReport TO printer
WHILE TRUE
OUTPUT TO REPORT miReport (datosCliente)
FETCH miCursor INTO datosCliente
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
END WHILE
##
## Finalizo el Report cuando salgo del while
##
FINISH REPORT myReport
END IF
CLOSE myCursor
FREE myCursor
Espero que os sea de utilidad... hasta la próxima.
No hay comentarios:
Publicar un comentario