Update masivo

Tengo este procedimiento para actualizar las fechas en una tabla jalando la fecha de la tabla cliente(registro1) pero como la tabla rccsaldos posee mas de 20 millones de registros (en los cuales se repiten varias veces el codigo del cliente, esq se amarra con cod_cuenta) ,me demora como 2 horas maso menos ,¿como podria optimizar mi procedimiento ? O ¿de que otra forma se podria obtener el mismo resultado pero de una forma ma rapida? Gracias
create or replace procedure actualizando_rccsaldos
is
cursor parte_regitro1 is select COD_SBS,FECH_REPORTE from registro1;
r tabla_curso%rowtype;
begin
for r in parte_regitro1 loop
update sbs_rccsaldosomar set FCH_REPORTE=r.FECH_REPORTE
where sbs_rccsaldosomar.COD_SBS=substr(r.COD_SBS,2);
end loop;
end;

1 respuesta

Respuesta
1
Para poder actualizarlo de manera más rápida lo que puedes hacer es realizando actualización en bulk ose utilizando el bulk collect ahí te envío un ejemplo adáptalo a tus necesidades saludos
Declare
TYPE num_tab IS TABLE OF employees.employee_id%TYPE;
sql_str VARCHAR2(200);
saltab num_tab;
BEGIN
UPDATE employees SET salary = 10000
WHERE department_id = 100
RETURNING employee_id
BULK COLLECT INTO saltab;
FOR i in saltab.FIRST..saltab.LAST LOOP
DBMS_OUTPUT.PUT_LINE(saltab(i));
END LOOP;
END;
Hola gracias por responderme pero creo que no has entendido
mi pregunta. Esta es la situación:
Taba reporte
---------------------------
idcliente | fecha | etc...
---------------------------
00001 |03/09/2008
00002 |05/09/2008
00003 |09/09/2008
00004 |25/09/2008
---------------------------
tabla saldos
--------------------------------------------
idcliente | idcuenta | fecha | saldo |......
--------------------------------------------
00001 | 12323 | |145585.0
00001 | 12545 | |545852.5
00002 | 54785 | |4578.52
00002 | 78956 | |5896.2
00002 | 78444 | |5444.2
00003 | 45454 | |5855.2
00004 | 22565 | |4596.2
00004 | 11223 | |5815.2
--------------------------------------------
La idea es actualizar la fecha en la tabla saldos
con el valor que le corresponde en la tabla reporte
y este es el procedimiento que he creado pero quiero saber
si existe una forma en reducir el tiempo de ejecución porque lo ejecuto para
una tabla reporte con 5 millones de registros y para la tabla saldos con unos
29 millones.
create or replace procedure actualizando_rccsaldos
is
cursor cur_reporte is select idcliente,fecha from reporte;
r tabla_curso%rowtype;
begin
for r in cur_reporte loop
update saldos set fecha =r.fecha
where saldos.idcliente=r.idcliente;
end loop;
end;
Gracias.
Si entendí tu pregunta y por eso te digo debes hacer es actualizaciones en bulk para que reduzcas el tiempo de actualización ya que si lo haces como lo estas haciendo pues el va a poner todos esos registros en memoria lo cual lo hará más lento pero si lo haces en bulk lo optimizas es puedes usar la clausula limit para ir actualizando de 100 en 100 o 500 en 500.
Hola :
Dirás que soy espeso, pero me podrías dar un ejemplo en base a la las tablas que te mostré anteriormente por favor, entiendo lo que hace el ejemplo que tu me diste, pero no se como adaptarlo al problema que te plantie, me podría ayudar por favor
esta pagina http://www.dba-oracle.com/plsql/t_plsql_dynamic.htm y me comentas
Voy de carreron
Podrías cerrar tu pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas