Einzelnen Beitrag anzeigen

Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Wöchentlich etliche Datensätze updaten

  Alt 2. Jan 2009, 16:23
Zitat von RWarnecke:
Ich würde das über eine Stored Procedure machen und diese mit den Daten füttern. Die Procedure wird direkt auf dem Server ausgeführt.
Das habe ich nun mal veruscht und die Ticks mittels GetTickcont gezählt. Meine alte Routine benötigt zwischen 62 und 78 Ticks. Bei der Stored Procedure benötige ich jedoch 1953 Tick.
Habe ich hier villeicht ein Fehler bei der Stored Produre gemacht oder warum ist die denn so langsam ?


Hier mal die Procedure

Delphi-Quellcode:

CREATE PROCEDURE DatenUpdate (
    Feld1 varchar(20) character set iso8859_1,
    Feld2 varchar(4) character set iso8859_1,
    Feld3 varchar(35) character set iso8859_1,
    Feld4 varchar(20) character set iso8859_1,
    Feld5 varchar(10) character set iso8859_1,
    Feld6 varchar(50) character set iso8859_1,
    Feld7 varchar(30) character set iso8859_1)
as
declare variable maxZaehler integer;
declare variable zaehler integer;
declare variable dsgefunden integer;
begin
  /* Procedure Text */
   for Select Max(Tabelle1Zaehler)
   From Tabelle1
   into :maxZaehler
   do
   DSGefunden = 0;
   Zaehler = 0;
   for Select Tabelle1Zaehler
   From Tabelle1
   Where (Feld1 = :Feld1) and (Feld2 = :Feld2) and (Feld5 = :Feld5)
   into :Zaehler
   do
    begin
     DSGefunden = 1;
    end
   if (DSGefunden = 1) then
    begin
     update Tabelle1
      set
       Tabelle1ZAEHLER = :Zaehler,
       Feld1 = :Feld1,
       Feld2 = :Feld2,
       Feld3 = :Feld3,
       Feld4 = :Feld4,
       Feld5 = :Feld5,
       Feld6 = :Feld6,
       Feld7 = :Feld7,
       AKTUELLESDATUM = current_date
       where Tabelle1ZAEHLER = :Zaehler;
       /*Test = 'update';*/
       Suspend;
    end
   else
    begin
     maxZaehler = maxZaehler +1;
      insert into Tabelle1
       (Tabelle1ZAEHLER, Feld1, Feld2, Feld3, Feld4, Feld5, Feld6,
        Feld7, AKTUELLESDATUM)
      values
       (:maxZaehler, :Feld1, :Feld2, :Feld3, :Feld4, :Feld5,
        :Feld6, :Feld7, current_date);
      /*Test = 'insert';*/
      Suspend;
    end
end^

SET TERM ; ^
Tanja
  Mit Zitat antworten Zitat