Oracle - Armar un cursor y un for para correr un Select

 
Vista:
Imágen de perfil de Sebastian

Armar un cursor y un for para correr un Select

Publicado por Sebastian (3 intervenciones) el 29/11/2013 18:39:38
Estimados estoy intentando hacer un for dentro de una un PLSQL pero no me sale. El Planteo es el siguiente, necesito hacer un cursor
donde pueda tomar los datos del cursor y ponerlo en un where de una for:

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
/* Formatted on 2013/11/29 11:17 (Formatter Plus v4.8.8) */
DECLARE
 
-- Abro el cursor que estoy necesitando
CURSOR cl IS
                    SELECT  p.pedido,
                            p.supedido,
                            p.tramite
                      FROM  pedidos p;
 
BEGIN
 
  OPEN cl; -- Abro el cursor que declare al comienzo
        FOR T IN cl
                LOOP
 
                    select  venta, pedido, subpedido,tramite
                      from  venta v,
                     where  v.pedido=cl.pedido -- cl.pedido corresponde al cursor
                       and  v.subpedido=cl.subpedido -- cl.subpedido corresponde al cursor
                       and  v.tramite=cl.tramite; -- cl.tramite corresponde al cursor
 
                     /* Necesito que cada registro resultante me lo mande al 
                        DATAGRIL de TOAD
                     */
 
                END LOOP;
  CLOSE c1;
 
END;

En si el query que viene adentro es mas complejo el que estoy invocando pero la logica
del cursor y del for es esa. Alguien podria darme una mano?. 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

Armar un cursor y un for para correr un Select

Publicado por luis pablo (235 intervenciones) el 29/11/2013 22:41:41
Seria de esta forma :

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
DECLARE
 
  CURSOR cl IS
  SELECT p.pedido,
  p.supedido,
  p.tramite
  FROM pedidos p;
 
  CURSOR C_VENTAS(p_pedido pedidos.pedido%type,  p_subpedido pedidos.subpedido%type, p_tramite   pedidos.tramite%type   ) IS
   select venta, pedido, subpedido,tramite
    from venta v,
    where v.pedido=p_pedido
     and v.subpedido=p_subpedido
     and v.tramite=p_tramite;
 
BEGIN
 
 
  FOR X IN cl LOOP
 
   FOR Y IN C_VENTAS(X.pedido, X.subpedido, X.tramite )  LOOP
 
        --tener en cuenta que estamos concatenando datos caracteres, asegurarse que sean datos del tipo char o varchar2
        DBMS_OUTPUT.PUT_LINE( Y.VENTA||'   '||Y.PEDIDO||'  '||Y.SUBPEDIDO||'  '||Y.TRAMITE);
 
   END LOOP;
 
  END LOOP;
 
 
END;


Modifícalo de acuerdo a lo que requieras, me comentas si te salio lo que deseabas ..


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
Imágen de perfil de Sebastian

Armar un cursor y un for para correr un Select

Publicado por Sebastian (3 intervenciones) el 01/12/2013 15:04:48
Luis en si el tema es un poco mas complicado, ahi te paso lo que tengo que hacer

te lo mando por rar porque no me alcanzan los caracteres.
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

Armar un cursor y un for para correr un Select

Publicado por luis pablo (235 intervenciones) el 01/12/2013 20:34:19
Puedes ser puntual con tus consultas? Qué es lo que quieres hacer?
Te sale algún mensaje de error?

Por favor sé preciso con tu consulta.

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
Imágen de perfil de JULIO_VAZQUEZ

Armar un cursor y un for para correr un Select

Publicado por JULIO_VAZQUEZ (3 intervenciones) el 20/12/2013 20:48:00
Hola Sebastian,
Por si aun no lo resuelves
Me suena a algo que hice hace poco, igual lo estaba haciendo como tu, pero no me salia, me salio de esta manera, no se si jale por las tablas, pero así es la idea. jeje
En vez de pasar tu parámetro, pasas la referencia del 1er cursor al 2do...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
   CURSOR cl
   IS
      SELECT P.PECL_NUMERO_PEDIDO AS PEDIDO, P.SPCL_NUMERO_SPD AS SUBPEDIDO, P.TSPD_ID AS TRAMITE
	  FROM...
	  WHERE...
BEGIN
   FOR x IN cl
   LOOP
      FOR y IN (SELECT...
	  	  	   FROM...
			   WHERE (SPCL.PECL_NUMERO_PEDIDO=x.PEDIDO AND SPCL.SPCL_NUMERO_SPD=x.subpedido AND SPCL.tspd_id=x.tramite)...
			   );
      LOOP
         DBMS_OUTPUT.PUT_LINE (...);
      END LOOP;
   END LOOP;
END;

Saludos
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