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

error en codigo

Estas en el tema de error en codigo en el foro de Oracle en Foros del Web. Hola, estoy tratando de meter unos registros en un arreglo para despues hacer un insert en una tabla. Lamentablemente no me funciona la linea t_cadena(i):= ...
  #1 (permalink)  
Antiguo 18/07/2012, 08:51
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 6 meses
Puntos: 0
error en codigo

Hola, estoy tratando de meter unos registros en un arreglo para despues hacer un insert en una tabla. Lamentablemente no me funciona la linea t_cadena(i):= buscarut_c.RUT_RECEPTOR;.
el error que me envia es:
Código:
ora-06531 reference to uninitialized collection
Código HTML:
declare
  cursor distintos is
         select distinct email FROM ppl_origen_2 where rownum <=10
  ;
  cursor buscarut (v_email ppl_origen_2.email%type) is
         select distinct RUT_RECEPTOR FROM ppl_origen_2 where email = v_email
  ;     
  buscarut_c buscarut%ROWTYPE;  
  TYPE cadena IS VARRAY(15) OF buscarut_c.RUT_RECEPTOR%TYPE;
  t_cadena cadena;
  i number :=0;
begin
  FOR distintos_c IN distintos LOOP
    open buscarut(distintos_c.email);
    i:=1;
    loop
        fetch buscarut into buscarut_c;
        --dbms_output.put_line(buscarut_c.RUT_RECEPTOR);
        --t_cadena.extend();
        t_cadena(i):= buscarut_c.RUT_RECEPTOR;
        EXIT WHEN buscarut%NOTFOUND;
        i:=i+1;
    end loop;
   close buscarut;
  end loop;
end;     
     

muchas gracias por su ayuda.
__________________
Dios es mas grande que tu problema :-)
  #2 (permalink)  
Antiguo 18/07/2012, 13:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: error en codigo

Si no estoy mal, los array en oracle empieza en la posición 1.

Cambia esto
i number :=0;

por esto
i number :=1;

Nos cuentas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 19/07/2012, 05:25
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: error en codigo

Creo que el error no es ese, Huesos.

Las colecciones de objetos hay que inicializarlas antes de usarlas, que el compi pruebe esto y nos cuente.

t_cadena := t_cadena ();

Saludos
  #4 (permalink)  
Antiguo 19/07/2012, 08:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error en codigo

Probemos:
Código SQL:
Ver original
  1. DECLARE
  2.  
  3.   CURSOR buscarut (v_email ppl_origen_2.email%TYPE) IS
  4.          SELECT DISTINCT RUT_RECEPTOR FROM ppl_origen_2 WHERE email = v_email;    
  5.   buscarut_c buscarut%ROWTYPE;  
  6.   TYPE t_mail IS VARRAY(200) OF ppl_origen_2.email%TYPE;
  7.   TYPE cadena IS VARRAY(15) OF buscarut_c.RUT_RECEPTOR%TYPE;
  8.   v_email t_email;
  9.   t_cadena cadena;
  10.   i NUMBER :=0;
  11. BEGIN
  12.   SELECT DISTINCT email
  13.   BULK COLLECT INTO
  14.   v_email
  15.   FROM ppl_origen_2
  16.   WHERE ROWNUM <= 10;
  17.  
  18.   FOR distintos_c IN distintos LOOP
  19.     OPEN buscarut(distintos_c.email);
  20.     i:=1;
  21.     LOOP
  22.         FETCH buscarut INTO buscarut_c;
  23.         --dbms_output.put_line(buscarut_c.RUT_RECEPTOR);
  24.         --t_cadena.extend();
  25.         t_cadena(i):= buscarut_c.RUT_RECEPTOR;
  26.         EXIT WHEN buscarut%NOTFOUND;
  27.         i:=i+1;
  28.     END LOOP;
  29.    CLOSE buscarut;
  30.   END LOOP;
  31. END;
__________________
¿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; 19/07/2012 a las 14:21

Etiquetas: funcion, select, tabla
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 18:14.