Cómo ejecutar un cursor en sybase?
- Published on
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