BBDD

Cómo ejecutar un cursor en sybase?

By Joel Lozano
Picture of the author
Published on
cursor-sybase

Cómo ejecutar un cursor en sybase?

Crear Cursor en Sybase ASE, puedes utilizar el comando declare cursor para crear un cursor y luego utilizar los comandos fetch y close para iterar sobre los registros devueltos por el cursor. Aquí tienes un ejemplo de cómo crear y utilizar un cursor en la consola de Sybase:

 --Declarar el cursor
 declare mi_cursor cursor for
 select columna1, columna2, columna3
 from mi_tabla
 where condiciones;
 
 -- Abrir el cursor
 open mi_cursor;
 
 -- Recorrer los registros del cursor
 declare @columna1 tipo_dato1,
 @columna2 tipo_dato2,
 @columna3 tipo_dato3;
 
 fetch mi_cursor into @columna1, @columna2, @columna3
 
 while @@sqlstatus = 0
 begin
 -- Realizar operaciones con los valores obtenidos
    
 --Obtener el siguiente registro del cursor
 fetch mi_cursor into @columna1, @columna2, @columna3
 
 end
 -- Cerrar el cursor
 close mi_cursor;
 -- Liberar recursos
 deallocate cursor mi_cursor

Cursor en sybase ejemplo

En Sybase ASE, los cursores se utilizan principalmente dentro de stored procedures para procesar conjuntos de resultados. Sin embargo, si deseas ejecutar un cursor fuera de un stored procedure, puedes hacerlo utilizando un bloque de código . Aquí tienes un

ejemplo: se usa cursor para recorrer una tabla con provincias y luego se actualiza un campo compuesto de consecutivo. la provincia mas un secuencial. Se parte con el campo a actualizar esta en NULL

 use basededatos
   go

    declare c_ciudad cursor for
        SELECT pv_provincia
        FROM dbo.provincia
        where pv_pais = 'Ecuador' 


     go 



     declare @w_secuencial    int, @w_reg SMALLINT,     @w_provincia   smallint
     open c_ciudad

     fetch  c_ciudad into @w_provincia

     while (@@sqlstatus!=2)  
     BEGIN

        SELECT @w_secuencial=1  

        SELECT @w_reg = count(0) from ciudad
        WHERE ci_pais = 38
        AND ci_provincia = @w_provincia


         --print '@w_provincia %1! @w_secuencial %2!, @w_reg%3!',@w_provincia,@w_secuencial,@w_reg

         WHILE @w_secuencial < = @w_reg
         BEGIN 
         --PRINT '@w_secuencial %1!',@w_secuencial
          set rowcount  1

            UPDATE ciudad  SET
                 ci_canton  = (case
                    when (len(convert(varchar(10),@w_secuencial)) = 1)
                    then  convert(int,convert(varchar(10),ci_provincia)+"0"+convert(varchar(10),@w_secuencial))
                    else convert(int,convert(varchar(10),ci_provincia)+convert(varchar(10),@w_secuencial))
                    end)
                from ciudad
                WHERE ci_pais =38
                AND ci_provincia = @w_provincia
                and ci_canton is null

             SELECT @w_secuencial = @w_secuencial+1

           end
     fetch  c_ciudad into @w_provincia
     END

     close c_ciudad
     deallocate cursor c_ciudad

set rowcount 0

GO

Ten en cuenta que ejecutar un cursor fuera de un stored procedure puede no ser la mejor práctica, ya que los cursores tienen un impacto en el rendimiento y pueden no ser eficientes para procesar grandes conjuntos de datos.

Es usado para actualizar data conmunmente.

GO


Stay Tuned

Get informed about the latest publications
The best articles, links and news related to web development delivered once a week to your inbox.