web analytics
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 que el campo aa ctualizar 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

2 comentarios en “Cómo ejecutar un cursor en sybase?”

  1. Pingback: Diseño De Páginas Web - (agosto 2023) - Bases De Datos - Tipos Mas Usados

  2. Pingback: Tipos De Bases De Datos - Las 8 Mas Usadas - (septiembre 2023)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *