Crear y recorrer un cursor de Oracle

Crear y recorrer un cursor de oracle
Dejo en este post cómo crear un cursor oracle sobre una consulta para recorrerlo después:

-- Zona de declaración 
declare
-- Declaramos el cursor sobre una consulta de una supuesta tabla usuarios.

cursor usuarios is 
    select * 
    from usuarios
    where edad > 20;

-- Fin declaración. Comenzamos el procedimento:

begin

-- Recorremos el cursor con un bucle for - loop
    for u in usuarios loop
        dbms_output.put_line(u.apellidos||' '||u.nombre);
    end loop; 
-- Fin bucle

end; 
-- Fin procedimiento



La función dbms_output.put_line muestra por pantalla el resultado en la variable "u" con la que recorremos el cursor. El operador || es de concatenación de cadenas.

Quizás te interese...

Share:
spacer

10 comentarios:

  1. Hola,

    podrías empezar recordando cómo se crean procedimientos y funciones.

    Saludos.

    ResponderEliminar
  2. De acuerdo compañero, esa será la próxima entrada.

    ResponderEliminar
  3. existe una manera de craer un cursor vacio al cual le puedo añadir registros de una estructura ya dada?

    ResponderEliminar
  4. Excelente aporte. Me sirvió de mucho para introducirme un poco más en el mundo de Oracle y la creación de paquetes.

    ResponderEliminar
  5. se puede utilizar dbms_output.put_line para un cursor explicito? osea un fetch into ..

    ResponderEliminar
  6. Buenas tarder necesito apoyo URGENTE!!!!
    tengo el cursor en SQL y quiero pasarlo a PL/SQL

    declare @Periodo nvarchar(6),@Meses int,@FecNacIni datetime, @FecNacFin datetime
    DECLARE Periodo CURSOR FOR
    select distinct Periodo=convert(varchar(6),Fecha,112)
    from DimFecha
    where Año=@Año
    order by convert(varchar(6),Fecha,112)

    create table Temp_FechasNac_NiñosMeses_IP02 ---drop table Temp_FechasNac_NiñosMeses
    ( PeriodoT nvarchar(6) not null,FecIni datetime not null,FecFin datetime not null ,FecIniAcum datetime)


    Open Periodo
    FETCH NEXT FROM Periodo INTO @Periodo
    WHILE @@FETCH_STATUS = 0
    BEGIN
    set @FecNacIni=DATEADD(month,@NacIni,@Periodo+'01')
    set @FecNacFin=dateadd(month,@NacFin,dateadd(day,-29,dateadd(month,1,@Periodo+'01')))
    insert into Temp_FechasNac_NiñosMeses_IP02
    select PeriodoT=@periodo
    ,FecIni=@FecNacIni
    ,FecFin=@FecNacFin
    ,FecIniAcum =null

    print @periodo
    FETCH NEXT FROM Periodo INTO @Periodo
    END
    CLOSE Periodo
    DEALLOCATE Periodo

    -----Definir fecha de inicio para acumulados
    declare @FecMin date
    select @FecMin = MIN(FecIni) from Temp_FechasNac_NiñosMeses_IP02

    update Temp_FechasNac_NiñosMeses_IP02
    set FecIniAcum = @FecMin

    ResponderEliminar
    Respuestas
    1. Es para crear parametros de edad en niño para indicadores

      Eliminar