Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/06/2011, 03:54
luz506
 
Fecha de Ingreso: junio-2006
Ubicación: Lima, mi trabajo
Mensajes: 100
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Cursor tarda mucho en ejecutarse

Hola,
de antemano gracias por las respuestas,
tengo una consulta en oracle que por si sola no demora mucho, 1 seg, pero cuando cuando se la llama por un cursor y hace un fetch into.., fetch bulk collect into, llega a demorar mucho mas, dicen que la query se ejecuta con el primer fetch, entonces la consulta en si deberia demorar lo mismo que el primer fetch, pero no es asi, alguien sabe que puede estar ocurriendo?

saludos



Cita:
Iniciado por matanga Ver Mensaje
El fetch de los cursores ya es conocido por ser problemático, hay dos opciones que puedes probar.

Opcion 1. Un insert sin utilizar un cursor, esta es sin dudas, la más rápida.

Código:
create table t1 (id number(8), datos1 varchar2(30))
/
/* insert into con el select con las 30 funciones */
insert into t1
select 1,to_char(1)) from dual
/
Opción 2. En caso que sea necesario un cursor por algún tipo de procesamiento intermedio antes de hacer el insert, está la forma del bulk collect.

Código:
create table t1 (id number(8), datos1 varchar2(30))
/
declare

 /* select con las 30 funciones */
 cursor c1 is 
  select 1 as id, to_char(1) as datos1
  from dual;

 /* tipo de dato tabla con el formato del cursor*/
 type type_t1 is table of c1%rowtype index by pls_integer;
 t type_t1;

begin

 open c1;
 loop

  /* limite de registros por cada bulk collect, esto es para no consumir toda la PGA*/
  fetch c1 bulk collect into t limit 100;
  exit when t.count = 0;

  /* loop que los datos que tengas que procesar*/
  for i in t.first..t.last loop
    insert into t1 (id, datos1) values (t(i).id, t(i).datos1);
  end loop;
  
 end loop;

end;
/
Saludos