Consulta lenta
Publicado por Martín (1 intervención) el 04/12/2008 13:11:01
Hola!!
Trabajo con PB10.5 y base Oracle en un ambiente distribuido y no encuentro la forma de realizar una simple consulta a la base para que me traiga mas de un registro. Tengo un cursor dinamico (copio el codigo mas abajo) pero cada ves que hago un fetch me trae solo un registro y como la consulta me trae cerca de 1000 registro hace un ida y vuelta al servidor 1000 veces (1 por fetch) y por internet esto me tarda mas de 8 minutos.
No encuentro la forma de hacer un fetch que me traiga mas de un registro.
CODIGO
prepare sqlsa from :ls_sqlstatement using this;
describe sqlsa into sqlda;
declare c_values_cursor dynamic cursor for sqlsa;
open dynamic c_values_cursor using descriptor sqlda;
fetch c_values_cursor using descriptor sqlda;
ll_rc = this.SQLCode
// Retrieve the distinct values and add them to the array
do while this.SQLCode = 0
choose case sqlda.OutParmType[1]
case TypeString!
ls_value = GetDynamicString (sqlda, 1)
case TypeDate!
ls_value = String (GetDynamicDate (sqlda, 1))
case TypeTime!
ls_value = String (GetDynamicTime (sqlda, 1))
case TypeDateTime!
ls_value = String (GetDynamicDateTime (sqlda, 1))
case else
ls_value = String (GetDynamicNumber (sqlda, 1))
end choose
as_values[UpperBound(as_values)+1] = ls_value
fetch c_values_cursor using descriptor sqlda;
ll_rc = this.SQLCode
loop
E tratado de usar un datastore para realizar la misma consulta de esta manera:
ds = create datastore
ds.settransobject(sqlca)
//ds.setsqlpreview( ls_sqlstatement)
ds.setsqlselect( ls_sqlstatement)
ds.retrieve( )
integer i
for i=0 to ds.rowcount( ) step 1
ls_value = ds.getitemformattedstring( i, 1)
as_values[UpperBound(as_values)+1] = ls_value
next
pero no me trae ningún dato.
Trabajo con PB10.5 y base Oracle en un ambiente distribuido y no encuentro la forma de realizar una simple consulta a la base para que me traiga mas de un registro. Tengo un cursor dinamico (copio el codigo mas abajo) pero cada ves que hago un fetch me trae solo un registro y como la consulta me trae cerca de 1000 registro hace un ida y vuelta al servidor 1000 veces (1 por fetch) y por internet esto me tarda mas de 8 minutos.
No encuentro la forma de hacer un fetch que me traiga mas de un registro.
CODIGO
prepare sqlsa from :ls_sqlstatement using this;
describe sqlsa into sqlda;
declare c_values_cursor dynamic cursor for sqlsa;
open dynamic c_values_cursor using descriptor sqlda;
fetch c_values_cursor using descriptor sqlda;
ll_rc = this.SQLCode
// Retrieve the distinct values and add them to the array
do while this.SQLCode = 0
choose case sqlda.OutParmType[1]
case TypeString!
ls_value = GetDynamicString (sqlda, 1)
case TypeDate!
ls_value = String (GetDynamicDate (sqlda, 1))
case TypeTime!
ls_value = String (GetDynamicTime (sqlda, 1))
case TypeDateTime!
ls_value = String (GetDynamicDateTime (sqlda, 1))
case else
ls_value = String (GetDynamicNumber (sqlda, 1))
end choose
as_values[UpperBound(as_values)+1] = ls_value
fetch c_values_cursor using descriptor sqlda;
ll_rc = this.SQLCode
loop
E tratado de usar un datastore para realizar la misma consulta de esta manera:
ds = create datastore
ds.settransobject(sqlca)
//ds.setsqlpreview( ls_sqlstatement)
ds.setsqlselect( ls_sqlstatement)
ds.retrieve( )
integer i
for i=0 to ds.rowcount( ) step 1
ls_value = ds.getitemformattedstring( i, 1)
as_values[UpperBound(as_values)+1] = ls_value
next
pero no me trae ningún dato.
Valora esta pregunta
0