Power Builder - Consulta lenta

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta lenta

Publicado por EdgarVL (43 intervenciones) el 09/12/2008 04:31:52
primero crea un stored procedure, pruebalo en oracle, luego crea un dw grid y toma como origen de datos el stored, luego crea el datastore y referencia al dw (ds.dataobject='dw_consulta'), luego has el retrieve() desde el datastore, con los parámetros que tengas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar