Ayuda en UPDATE
Publicado por Edward (1 intervención) el 19/11/2009 21:59:34
Buenas, espero me puedan ayudar.... Explico un poco el problema que tengo:
Tengo un query para hacer un update, lo que hago es que en el FOR selecciono la cantidad de registros en total que quiero actualizar (que en total son 600220) y que cumplen con la condicion.
Luego asigno a las variables los valores deseados y despues es donde viene
el update que se queda super pegado y no hace nada! ...le coloque un AND ROWNUM < 5 y AND ROWNUM < 100 en el SELECT y funciono fino, actualizo
en la tabla la cantidad de registros, pero cuando coloco AND ROWNUM < 50000
se queda guindado y no hace nada, si no hace 50000 pos mucho menos 600220 registros.
La idea que yo pense es poner una especie de segmentacion dentro del UPDATE
o al principio de query que me vaya haciendo que se yo, de 1000 en 1000 hasta completar los registros pero no tengo idea de como hacerlo (en el caso de que se pueda hacer)
Aqui envio el query completo para ver si me pueden ayudar:
DECLARE
v_movil VARCHAR2(30);
v_imsi VARCHAR2(20);
v_tec VARCHAR2(60);
BEGIN
FOR i IN (SELECT id_uso, esn, campo3 FROM cmcdb.TEMP_BLACKBERRY WHERE
cdominio = 'r2_gsm') LOOP
v_movil:= i.id_uso;
v_imsi := i.esn;
v_tec := i.campo3;
update cmcdb.temp_blackberry z
set z.campo4 = 'PREPAGO',
z.campo5 = v_tec,
z.id_uso = v_movil
where z.cdominio = 'r1_gsm'
and z.esn = v_imsi;
END LOOP;
EXCEPTION
WHEN OTHERS Then
null;
END;
/
commit;
exit
Tengo un query para hacer un update, lo que hago es que en el FOR selecciono la cantidad de registros en total que quiero actualizar (que en total son 600220) y que cumplen con la condicion.
Luego asigno a las variables los valores deseados y despues es donde viene
el update que se queda super pegado y no hace nada! ...le coloque un AND ROWNUM < 5 y AND ROWNUM < 100 en el SELECT y funciono fino, actualizo
en la tabla la cantidad de registros, pero cuando coloco AND ROWNUM < 50000
se queda guindado y no hace nada, si no hace 50000 pos mucho menos 600220 registros.
La idea que yo pense es poner una especie de segmentacion dentro del UPDATE
o al principio de query que me vaya haciendo que se yo, de 1000 en 1000 hasta completar los registros pero no tengo idea de como hacerlo (en el caso de que se pueda hacer)
Aqui envio el query completo para ver si me pueden ayudar:
DECLARE
v_movil VARCHAR2(30);
v_imsi VARCHAR2(20);
v_tec VARCHAR2(60);
BEGIN
FOR i IN (SELECT id_uso, esn, campo3 FROM cmcdb.TEMP_BLACKBERRY WHERE
cdominio = 'r2_gsm') LOOP
v_movil:= i.id_uso;
v_imsi := i.esn;
v_tec := i.campo3;
update cmcdb.temp_blackberry z
set z.campo4 = 'PREPAGO',
z.campo5 = v_tec,
z.id_uso = v_movil
where z.cdominio = 'r1_gsm'
and z.esn = v_imsi;
END LOOP;
EXCEPTION
WHEN OTHERS Then
null;
END;
/
commit;
exit
Valora esta pregunta


0