Oracle - Consulta para inserción

 
Vista:

Consulta para inserción

Publicado por Luis De Araujo (1 intervención) el 11/12/2015 15:52:12
Buen día,

Tengo el siguiente inconveniente:

Estoy creando un nuevo registro. al momento de cargar el nombre tengo una validación en la que al cambiar de campo ejecuto un cursor para que me traiga unos valores que deben aparecer en pantalla, sin embargo me arroja el último valor del cursor.

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
32
33
34
35
36
37
38
39
40
41
42
43
WHEN-VALIDATE-ITEM
 
DECLARE
 
v_direccion number;
 
CURSOR CUR_COD_PRD IS
	SELECT P_PEN_PRD.COD_C_PRD, C_PRD.NOM
  	FROM P_PEN_PRD, C_PRD
 	 WHERE C_PRD.COD = P_PEN_PRD.COD_C_PRD
  	 AND (P_PEN_PRD.COD_P_CLIENTE=:P_PEN.COD_P_CLIENTE)
  	 AND (P_PEN_PRD.COD_P_PEN IN (SELECT MIN(COD)
  	 			 FROM P_PEN
  	 			 WHERE COD_P_CLIENTE = :P_PEN.COD_P_CLIENTE))
order by C_PRD.NOM;
 
BEGIN
 
		SELECT SEC_G_DIRECCION
      INTO V_DIRECCION
      FROM P_PEN
     WHERE COD_P_CLIENTE = :P_PEN.COD_P_CLIENTE
       AND COD IN (
                  SELECT MIN(COD)
                    FROM P_PEN
                   WHERE COD_P_CLIENTE = :P_PEN.COD_P_CLIENTE);
 
 
 
		if :p_pen.nom is not null
			then
				if :p_pen_prd.nom_c_prd is null
					then
					/*Se recorre el cursor de CUR_COD_PRD*/
	  				for T_COD_PRD in CUR_COD_PRD loop
	  					:p_pen_prd.cod_c_prd := t_cod_prd.cod_c_prd;
		  				:p_pen_prd.nom_c_prd := T_COD_PRD.NOM;
	  				end loop;
 
			        end if;
		end if;
 
END;

Agradecería muchísimo la ayuda de alguien.
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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Consulta para inserción

Publicado por Rafael (328 intervenciones) el 14/12/2015 09:14:23
Luis:

Esto es un poco de logica vamos a ver un ejemplo con manzanas...

Tienes 12 manzanas y 2 manos.
Yo te voy pasando las manzanas de dos en dos.
En las manos solo puedes tener una manzana en cada mano.
La primer vez tus manos estan vacias y me aceptan las dos manzanas.
La segunda vez, obviamente sueltas las dos primeras y te quedas con las dos nuevas.
Al final te vas SOLO con las ULTIMAS 2 manzanas...

El resto a saber donde las soltaste y donde cayeron... perdidas.

Pues exactamente esto te esta pasando con el procedimiento. En el loop estas atrapando los datos SIEMPRE con las mismas DOS variables
1
2
:p_pen_prd.cod_c_prd := t_cod_prd.cod_c_prd;
		  				:p_pen_prd.nom_c_prd := T_COD_PRD.NOM;
De ahi que te quedes solo con el ultimo valor...

Que te falta?
Aumentar el espacio donde guardas y/o ir concatenando los valores
Entiendes ?? Que tipo de objeto es :p_pen_prd ya que en lo que has pasado del codigo no se puede inferir, de tal modo que no te puedo decir que es lo que corresponde para añadir o concatenar.

Saludos

Pd. Si esto te sirve a mi me sirve un +1
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