Einzelnen Beitrag anzeigen

Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 30. Mai 2019, 14:20
Habe mal auf die Schnelle eine Procedure geschrieben, mit der man die IDs der letzten 10 Datensätze schnell ermitteln kann:

Delphi-Quellcode:
SET TERM ^ ;

create or alter procedure p_last10
returns (
    bmin integer,
    bmax integer)
as
declare variable c integer;
declare variable maxl integer;
declare variable btemp integer;
begin
  c=1;
  select max(buch_nr) from buchungen into :bmax;
  bmin=bmax;
  maxl=0;
  while ((c<10) and (maxl<100)) do
  begin
    select max(buch_nr) from buchungen where buch_nr<:bmin into :btemp;
    if (not btemp is null) then
    begin
      c=c+1;
      bmin=btemp;
    end

    maxl=maxl+1;
  end
  suspend;
end
^

SET TERM ; ^
Die Procedure liefert die beiden Werte bmin und bmax.
Maxl soll Verhindern, dass die Procedure in einer Endlosschleife hängenbleibt, wenn keine 10 Datensätze gefunden werden (ungetestet).

Dann braucht man nur noch den Select mit den beiden Parametern aus der Procedure ausführen.

Bei mir
select * from buchungen where buch_nr between :s and :t
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat