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
Autor: Ing. Liliana Suárez