Oracle - Cursor

 
Vista:

Cursor

Publicado por Fernanda (37 intervenciones) el 11/02/2013 14:20:22
Hola a todos,

Necesito obtener los datos de una tabla x a partir de los datos que están en un cursor. Como son varios campos no puedo utilizar el select campo into variable. por lo que pensé en utilizar otro cursor
pero no se como hacerlo ya que debería declararlo antes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Procedure SP1( p_cod in number)
   is
        -- variables para el cursor
        v_nombre     varchar2(500);
        v_rut        varchar2(10);
 
        cursor c1 is
             select  rut
             from temp_operador where cod = p_cod;
 
    begin
            open c1;
            loop
              fetch c1 into v_rut ;
              exit when c1%notfound;
 
              -- aqui necesito obtener los datos de la  segunda tabla segun
                        el rut obtenido del cursor C1
                 select nombre, direccion, comuna
                 from temp_datos_perso
                 where rut =  v_rut ;
 
              -- con los datos obtenidos desde temp_datos_perso, tengo
                      que crear un string
             -- Algo así:
                txtdatos = nombre + ','
                txtdatos = txtdatos + direccion + ','
            end loop;
            close c1;
 
    end;


Alguien tiene una idea de como hacerlo......
MUCHAS GRACIAS !!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Cursor

Publicado por luis (235 intervenciones) el 11/02/2013 18:14:03
Hola Fernanda, para tu requerimiento debes usar cursores parametrizados, segun tu ejemplo seria mas o menos así :

Procedure SP1( p_cod in number)
is
-- variables para el cursor
v_nombre varchar2(500);
v_rut varchar2(10);

cursor c1 is
select rut
from temp_operador where cod = p_cod;


cursor c2(paramRut tabla.campo%type ) is
Select nombre, direccion, comuna
from temp_datos_perso
where rut = paramRut;

begin
open c1;
loop
fetch c1 into v_rut ;
exit when c1%notfound;

-- aqui necesito obtener los datos de la segunda tabla segun

For x in c2(v_rut) loop


-- con los datos obtenidos desde temp_datos_perso, tengo
que crear un string
-- Algo así:
txtdatos = x.nombre + ','
txtdatos = txtdatos + x.direccion + ','

End loop;


end loop;
close c1;

end;



Te recomiendo usar el For Loop al querer barrer cursores, utilizas menos instrucciones y es mas optimo pues usa menos recursos de la BD. Mucha suerte con el uso de cursores parametrizados, me comentas como te fue.

Saludos

Luis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar