Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

viernes, 7 de diciembre de 2012

Equivalencia SQL Vs. RPG






 
 
Orientado a aquellos programadores en RPG que deben lidiar con códigos en Sql con los que no están muy familiarizados.

En esta oportunidad hacemos una equivalencia entre el comando Fetch del Sql y las sentencias de lectura y posicionamiento del RPG, RPGLE.

Con los siguientes comandos es posible construir un programa que permita manipular el subfile en grupo de n filas y realizar el avance y retroceso de página adecuado, así como el posicionamiento y las búsquedas que sean requeridas.

Repasamos la función DECLARE en la cual debemos declarar un cursor dinámico para poder acceder a un posicionamiento “random” en el archivo.

Luego de declarar el cursor Scroll dinámico, con las condiciones de Select que hagan falta, realizamos el open del cursor y luego con un fetch before nos posicionamos al principio de la tabla. Esto seria el Setll del rpg, luego con un fetch next realizamos lo que sería un read en rpg. El “fin de archivo” lo hace el sqlcode <> 0.

Equivalencias SQL Vs RPG

Fetch prior = READP

Fetch After = Setgt  se coloca al final de la tabla resultado de la selección

Fetch Before = Setll se coloca al principio de la tabla resultado de la selección

Fetch relative ( +n, -n)  se posiciona n filas adelante o – n filas atrás de la ultima fila leída

Fetch first =  trae el primer registro de la tabla resultado de la selección

Fetch last = trae el ultimo registro de la tabla resultado de la selección

Fetch current = re-lee el registro que se acaba de leer

Fetch Next = read. Lee el siguiente

__________________________________________

Un ejemplo sencillo de lectura de N en N registros hacia adelante es:

exec sql declare c1    dynamic scroll cursor for     //esto se “declara una sola vez”  en

                                                                                            el programa, a menos que se

                                                                                           quiera modificar 
                                                                                           la sentencia select//

select *                       

from libreria/archivo                          

order by clave;                          

exec sql open c1;            

exec sql fetch before from c1;  //setll

exec sql fetch next from c1 into Dsdata  //read

Cuenta = 1

Dow sqlcode = 0 and cuenta < N;  

//instrucciones que hagan falta

Cuenta = cuenta +1;

exec sql fetch next from c1 Dsdata;   //read

enddo;         

Un ejemplo sencillo  de lectura de N en N registros hacia atrás es:

exec sql                                                      

exec sql declare c1    dynamic scroll cursor for     //esto se declara una sola vez en el pgm

select *                       

from libreria/archivo                          

order by clave;                          

Rrn    = N+1;                               

exec sql fetch prior from c1 into :Dsdata; //readp

Dow sqlcode  = 0 and cuenta  > 1 ;      

cuenta  -= 1;    

//instrucciones que hagan falta                        

exec sql fetch prior from c1 into :Dsdata;

Enddo;            

Estos comandos son particularmente útiles cuando queremos cargar un subfile de n en n registros haciendo retroceso y avance de página utilizando sentencias Sql que nos liberan de la necesidad de crear lógicos adicionales para posicionamiento u ordenamiento.

     

Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Autor: Ing. Liliana Suárez