
Optimizacion de un for each
Publicado por Luis (5 intervenciones) el 15/01/2016 16:21:03
Hola, tengo un procedimiento que se ejecuta en una cadena batch, y que esta actualmente demorando 3 a 4 horas, dada la cantidad de registros involucrados.
Analizando un poco el codigo he ido optimizando algunas consultas repetidas, etc.
Me encuentro si con el siguiente codigo, el cual realiza una serie de for each dependiendo de una cantidad de ocurrencias de un vector:
Existe alguna manera de poder optimizar esta rutina, del mismo modo quie por ejemplo se realiza en sql generando un select interno de esta forma?
select * from FSD011
where PgCod = @Pgcod
and Scmod = @Scmod
and Scsuc = @Scsuc
and Sccta = @Sccta
and Scoper = @Scoper
and Scrub in (select Rubro from TBLRUB where PgCod = @Pgcod and CICpo = 'RUBCASTI')
ojala quede clara la pregunta, y muchas gracias por sus sugenrencias
Saludos
Analizando un poco el codigo he ido optimizando algunas consultas repetidas, etc.
Me encuentro si con el siguiente codigo, el cual realiza una serie de for each dependiendo de una cantidad de ocurrencias de un vector:
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
// aca se carga el vector con los rubros
&Vector() = 0
&i = 1
For Each // tabla de rubros
Where PgCod = &Pgcod
Where CICpo = 'RUBCASTI'
Defined By CIPzoD
If Rubro <> &Rubro
&Vector(&i) = Rubro
&i = &i + 1
EndIf
EndFor
// aca se recorre el vector, y dentro del loop, se hace nuevamente otra busqueda con foreach
Do While &j < &i
For Each // FSD011
Where PgCod = &Pgcod
Where Scmod = &Scmod
Where Scsuc = &Scsuc
Where Sccta = &Sccta
Where Scoper = &Scoper
Where Scrub = &Vector(&j) //aca se itera con cada rubro encontrado
Where Scsdo <> 0
&SaldoCastigado = &SaldoCastigado + Scsdo*-1
&ScsbopCast = Scsbop
&ScfvalCast = Scfval
EndFor
&j = &j + 1
EndDo
Existe alguna manera de poder optimizar esta rutina, del mismo modo quie por ejemplo se realiza en sql generando un select interno de esta forma?
select * from FSD011
where PgCod = @Pgcod
and Scmod = @Scmod
and Scsuc = @Scsuc
and Sccta = @Sccta
and Scoper = @Scoper
and Scrub in (select Rubro from TBLRUB where PgCod = @Pgcod and CICpo = 'RUBCASTI')
ojala quede clara la pregunta, y muchas gracias por sus sugenrencias
Saludos
Valora esta pregunta


0