En este artículo ya habíamos visto como usar cursores, y lo útiles que pueden ser:
https://firebird21.wordpress.com/2013/06/02/usando-cursores/
Ahora veremos un ejemplo donde el cursor tiene condiciones que vienen como parámetros de entrada del stored procedure.
CREATE PROCEDURE CURSOR_1( tnCodSuc TYPE OF COLUMN CLIENTES.CLI_CODSUC, tnIdent1 TYPE OF COLUMN CLIENTES.CLI_IDENTI, tnIdent2 TYPE OF COLUMN CLIENTES.CLI_IDENTI) RETURNS( ftnIdenti INTEGER, ftcNombre VARCHAR(40)) AS DECLARE VARIABLE lcContinuar CHAR(1); DECLARE VARIABLE MiCursor CURSOR FOR ( SELECT CLI_IDENTI, CLI_NOMBRE FROM CLIENTES WHERE CLI_CODSUC = :tnCodSuc AND CLI_IDENTI BETWEEN :tnIdent1 AND :tnIdent2); BEGIN OPEN MiCursor; /* Se abre el cursor */ lcContinuar = 'S'; WHILE (lcContinuar = 'S') DO BEGIN FETCH /* extrae una fila */ MiCursor INTO :ftnIdenti, :ftcNombre; IF (ROW_COUNT = 1) THEN BEGIN /* si ROW_COUNT = 1, se leyó una fila */ /* Aquí se puede realizar algún proceso con los datos */ SUSPEND; END ELSE lcContinuar = 'N'; /* Si ROW_COUNT = 0, ya no hay más filas */ END CLOSE MiCursor; /* Se cierra el cursor */ END;
Como puedes ver, este stored procedure tiene 3 parámetros de entrada:
- el código de la Sucursal
- el identificador del primer cliente que nos interesa
- el identificador del último cliente que nos interesa
y por lo tanto en el cursor tendremos los datos de los clientes que pertenecen a esa sucursal y cuyos identificadores están dentro del rango.
Artículos relacionados:
Deja un comentario