Hola.
Hay varias formas de conseguir el resultado desde un sp. Me he dado a la tarea de codificar una de ellas y en mis pruebas todo ha sido satisfactorio.
Aqui dejo el script para que lo probes por vos mismo y que lo adaptes a tus necesidades.
Código SQL
[-]
Create table tabla1 (
contador integer not null primary key,
campo1 varchar(50),
campo2 varchar(50)
);
insert into tabla1
values (10, 'diez', 'diez');
insert into tabla1
values (20, 'veinte', 'veinte');
Set term ^ ;
create procedure Tabla_Secuenciada as Begin exit; end^
set term ; ^
commit;
Set term ^ ;
Alter procedure Tabla_Secuenciada
(
contador_ini integer,
contador_fin integer
)
returns
(
contador integer,
Campo1 Varchar(50),
Campo2 VarChar(50)
)
AS
declare variable contador_temp integer;
declare variable campo1_temp varchar(50);
declare variable campo2_temp varchar(50);
Begin
contador = contador_ini - 1;
for Select contador, campo1, campo2
from tabla1
where contador between :contador_ini and :contador_fin
into :contador_temp, :campo1_temp, :campo2_temp
do
Begin
contador = contador + 1;
if (contador_temp > contador) Then
begin
campo1 = null;
campo2 = null;
while (contador < contador_temp) do
Begin
suspend;
contador = contador + 1;
end
end
contador = contador_temp;
campo1 = campo1_temp;
campo2 = campo2_temp;
suspend;
end
if (contador_fin > contador) Then
begin
campo1 = null;
campo2 = null;
while (contador < contador_fin) do
Begin
contador = contador + 1;
suspend;
end
end
end
^
set term ; ^
commit;
select * from tabla_secuenciada(1, 5);
select * from tabla_secuenciada(10, 10);
select * from tabla_secuenciada(10, 20);
select * from tabla_secuenciada(5, 25);
select * from tabla_secuenciada(15, 20);
select * from tabla_secuenciada(15, 25);
select * from tabla_secuenciada(21, 25);
select * from tabla_secuenciada(25, 25);
Espero sea de ayuda para vos y para la comunidad.
Hasta luego.