Si utilizas un RPGLE armando totalmente el string de sql a ejecutar, es decir 
armas la sentencia sql por cada registro que lees de la tabla donde estan los 
¨"where", los paths de acceso de las instrucciones se crean cada vez que 
ejecutas una instruccion.

Si la instruccion que ejecutaras fuera bajo el esquema Select * from 
XXXXXXXX/Files Where XXXXX = :???????,  donde ?????? son los valores de 
seleccion, seria mejor por que los paths de acceso se mantienen y no se crean 
cada vez.

Pero como este no es el caso tuyo, te recomiendo a parte de revisar las 
recomendaciones de indices que te han hecho, que realices solo los Select 
dentro del programa RPGLE, no directamente el INSERT, COLOQUES AL FINAL DEL 
SELECT la instrucccion FOR READ ONLY, esto agilisa el procesamiento de los 
datos en el servidor hasta en un 15%, lo proceses por medio de un cursor y los 
insertes en tabla, puede que lleve mas accesos, pero puede agilizarte el 
proceso es cuestion de medir.

Si mal no me acuerdo el insert con subselect y for read only no es aceptado

 



________________________________
From: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
To: [email protected]
Sent: Friday, October 24, 2008 12:35:39 PM
Subject: CONSULTA SOBRE RPGLE Y SQL

Estimados,

Recientemente estuve cambiando una aplicación hecha  de unas 30 consultas 
(Query/400). Cada query extrae datos de dos tablas, se totalizan y se genera 
un archivo. Cada consulta va agregando datos al archivo de salida. Lo unico 
que cambia entre consulta en la selección de registros, que es bastante 
diversa (en algunos casos evalúa una campo, tres campos, en otros 4, etc.) 
Los registros recuperados por cada querys son pocos pero las tablas 
utilizadas son enormes.

Bueno, resulta que se ha sustituido esto (los 30 querys) por un RPGLE con 
SQL-embebido. Lo que se hizo es construir una sentencias preparadas por cada 
uno de los querys. Tenemos un archivo donde hemos colocando  los where, 
hacemos un Dow con este archivo y por cada lectura construimos un sentencia 
preparada insertadole su respectivo where. La sentencia preparada que 
creamos es más o menos así:

insert "archivodesalida" select xx from tabla1 left join tabla2 on xx=bb 
where "(del archivo)" group by xxx

Funciona solo que muy lento en comparación de los querys. Viendo los 
mensajes del depurador, dice que se ha reconstruido el plan de consultas y 
advierte que si se esta reconstruyendo mucho puede ser un error en la 
aplicación.

Mi consulta va en como hacer para que no se reconstruya el plan de acceso o 
si es el tipo de sentencia lo malo, mejor creo un cursor que accedo los 
registros con un fetch... ¿no se?, alguien tendrá una idea.

SALUDOS A TODOS de El Salvador.

MAURICIO HERRERA


__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400



      
__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

Responder a