viernes, 13 de mayo de 2016

DECLARACION DE CURSORES EN INFORMIX CON LA CLAUSULA WITH HOLD. Declaring Informix cursors using the WITH HOLD clause.

Si declaramos un cursor en Informix que va a tratar muchas filas, puede ser que nos interese declarar una transacción por cada una de ellas. El problema viene cuando al hacer el COMMIT o ROLLBACK de la transacción, observamos que nuestro cursor queda automáticamente cerrado.

Para evitarlo debemos declarar el cursor con la clausula WITH HOLD. Esta clausula puede utilizarse tanto en r4gl como en un Stored Procedure.

En STORED PROCEDURES:
CREATE PROCEDURE 'informix'.procedureName()

    FOREACH WITH HOLD
          SELECT column1, column2 INTO var1, var2 FROM table1WHERE condicion

         BEGIN WORK;
         ---
         ---
         UPDATE table2 SET  column1 = column1 - var1 WHERE condicion;
         UDPATE table3 SET column1 = column1 + (column1 * var2 / 100)
                WHERE condicion;
         ---
         ---
         COMMIT WORK;

    END FOREACH;

END PROCEDURE;


 En R4GL:

DECLARE cursorName CURSOR WITH HOLD FOR
          SELECT column1, column2 FROM table1 WHERE condicion

FOREACH cursorName INTO var1, var2

         BEGIN WORK;
         ---
         ---
         UPDATE table2 SET  column1 = column1 - var1 WHERE condicion;
         UDPATE table3 SET column1 = column1 + (column1 * var2 / 100)  
                WHERE condicion;
         ---
         ---
         COMMIT WORK;

END FOREACH



Espero que os sea de utilidad.

No hay comentarios:

Publicar un comentario