Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Consulta dentro de un While

Estas en el tema de Consulta dentro de un While en el foro de Oracle en Foros del Web. hola a todos. Tengo el siguiente problema: Estoy realizando una consulta directamente en oracle y lo que estoy haciendo es hacer una consulta dentro de ...
  #1 (permalink)  
Antiguo 04/07/2012, 09:48
 
Fecha de Ingreso: septiembre-2008
Mensajes: 23
Antigüedad: 16 años, 1 mes
Puntos: 0
Consulta dentro de un While

hola a todos. Tengo el siguiente problema: Estoy realizando una consulta directamente en oracle y lo que estoy haciendo es hacer una consulta dentro de un While, pero me arroja error. Quizas es por que hay que meterlo dentro de un procedimiento o algo por el estilo o no es necesario?. Les pondre mi codigo bien reducido (aun asi no funciona) para que se entienda mejor.

DECLARE
RESULTADO NUMBER := 1;
BEGIN
WHILE RESULTADO <> 0 LOOP
SELECT MSF600.EQUIP_NO
FROM ELLIPSE.MSF600 MSF600
RESULTADO:=0;
END LOOP;
END;
  #2 (permalink)  
Antiguo 05/07/2012, 04:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta dentro de un While

1) Ese no es (que yo sepa) el operador de igualdad, sino el de asignación.
2) Si vas a hacer un solo tipo de operación en el WHILE con os resultados, usa BULK COLLECT y FORALL.
3) Si vas a hacer más de una, usa cursores y BULK COLLECT, porque la consulta en sí, por más que esté en un WHILE, devolvería una tabla de resultados, y no uno pro uno.
4) Si, tienes que hacer un script PL/SQL para que funcione.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 05/07/2012 a las 07:21
  #3 (permalink)  
Antiguo 06/07/2012, 18:23
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Consulta dentro de un While

El resultado de un SELECT dentro de un bloque PL/SQL siempre tiene que almacenarse dentro de una variable, que puede ser de tipo simple (varchar, number, etc), de tipo colección (arrays, tables, etc) o de tipo puntero (cursor), por ejemplo:

1. Tipo Simple, el select solo puede devolver un registro que se almacena en la variable var_equip y se produce un error si devuelve más de uno o ninguno.

Código:
declare
 var_equip msf600.equip%type;
begin
 select msf600.equip into var_equip 
 from msf600
 where id_msf600 = 1;

 dbms_output.put_line( var_equip );
end;
2. Tipo Colección, el select puede devolver ninguno, uno o varios registros que se almacenan simultáneamente en la variable var_equip.

Código:
declare
 type t_equip is table of msf600.equip%type index by pls_integer;
 var_equip t_equip;
begin
 select msf600.equip bulk collect into var_equip 
 from msf600;

 forall i in var_equip.first .. var_equip.last
  dbms_output.put_line( var_equip(i) );
end;
3. Tipo Puntero, el select puede devolver ninguno, uno o varios registros, pero la variable var_equip solo puede almacenar uno por vez, el resto se los referencia a la tabla con un puntero (también puedes combinar los cursores con las colecciones).

Código:
declare
 cursor c_equip is select msf600.equip from msf600;
 var_equip msf600.equip%type;
begin
 open c_equip;
 loop
  fetch c_equip into var_equip;
  exit when c_equip%notfound;
  dbms_output.put_line( var_equip );
 end loop;
end;

--o bien, un código más simple
begin
 for c_equip in ( select msf600.equip from msf600 ) loop
  dbms_output.put_line( c_equip.equip);
 end loop;
end;
Saludos

Etiquetas: sql, anidados, ciclos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:48.