Subject | Slow server process after delete trigger |
---|---|
Author | Metin Gönen |
Post date | 2004-08-05T18:55:01Z |
Hi to all,
I have a master stocks table and a detail stocks table. Below is the trigger
which starts after the detail table delete. If I delete let's say 100
records at one time, the computer almost stops and it lasts about five
minutes to end this trigger process. The total records in master table is
about 2000 and detail table is about 5000 records. I am testing this with
p4 1.8 / win XP. / FB 1.5 .
Can anyone suggest a better way to do this. I am really in trouble with
this.
Another question I would like to ask is what is the best way to update a
master table which contains averages of some columns in detail table.
Regard,
Metin Gonen
CREATE TRIGGER POSHAR_AFTER_DELETE FOR POSHAR AFTER DELETE POSITION 0
AS
DECLARE VARIABLE MTOPLAM DOUBLE PRECISION;
DECLARE VARIABLE MORT DOUBLE PRECISION;
DECLARE VARIABLE MORTAG DOUBLE PRECISION;
DECLARE VARIABLE MHIGH DOUBLE PRECISION;
DECLARE VARIABLE MLOW DOUBLE PRECISION;
BEGIN
MORT=0;
MTOPLAM=0;
MORTAG=0;
MHIGH=0;
MLOW=0;
/* HERE UPDATING MASTER STOCKS TABLE AND WRITING THE SUMS & AVERAGES
TO IT */
IF ((OLD.GCTIP='C') AND (OLD.DEPOTRANS='0') ) THEN
BEGIN
SELECT SUM(MIKTAR*CARPAN) ,
AVG(FIYATNET/CARPAN),
SUM(MIKTAR*FIYATNET),
MAX(FIYATNET/CARPAN),
MIN(FIYATNET/CARPAN)
FROM POSHAR WHERE GCTIP='C' AND STOOTO=OLD.STOOTO INTO
:MTOPLAM,
:MORT,
:MORTAG,
:MHIGH,
:MLOW;
UPDATE STOK
SET TOPCIK=TOPCIK-(OLD.MIKTAR*OLD.CARPAN),
ORTSAT=:MORT,
ORTSATAG=:MORTAG/:MTOPLAM,
HIGHSATIS=:MHIGH,
LOWSATIS=:MLOW
WHERE OTONUM=OLD.STOOTO;
END
IF ((OLD.GCTIP='G') AND (OLD.DEPOTRANS='0') ) THEN
BEGIN
SELECT SUM(MIKTAR*CARPAN) ,
AVG(FIYATNET/CARPAN),
SUM(MIKTAR*FIYATNET),
MAX(FIYATNET/CARPAN),
MIN(FIYATNET/CARPAN)
FROM POSHAR WHERE GCTIP='G' AND STOOTO=OLD.STOOTO INTO
:MTOPLAM,
:MORT,
:MORTAG,
:MHIGH,
:MLOW;
UPDATE STOK
SET TOPGIR=TOPGIR-(OLD.MIKTAR*OLD.CARPAN),
ORTMAL=:MORT,
ORTMALAG=:MORTAG/:MTOPLAM,
HIGHALIS=:MHIGH,
LOWALIS=:MLOW
WHERE OTONUM=OLD.STOOTO;
END
END
[Non-text portions of this message have been removed]
I have a master stocks table and a detail stocks table. Below is the trigger
which starts after the detail table delete. If I delete let's say 100
records at one time, the computer almost stops and it lasts about five
minutes to end this trigger process. The total records in master table is
about 2000 and detail table is about 5000 records. I am testing this with
p4 1.8 / win XP. / FB 1.5 .
Can anyone suggest a better way to do this. I am really in trouble with
this.
Another question I would like to ask is what is the best way to update a
master table which contains averages of some columns in detail table.
Regard,
Metin Gonen
CREATE TRIGGER POSHAR_AFTER_DELETE FOR POSHAR AFTER DELETE POSITION 0
AS
DECLARE VARIABLE MTOPLAM DOUBLE PRECISION;
DECLARE VARIABLE MORT DOUBLE PRECISION;
DECLARE VARIABLE MORTAG DOUBLE PRECISION;
DECLARE VARIABLE MHIGH DOUBLE PRECISION;
DECLARE VARIABLE MLOW DOUBLE PRECISION;
BEGIN
MORT=0;
MTOPLAM=0;
MORTAG=0;
MHIGH=0;
MLOW=0;
/* HERE UPDATING MASTER STOCKS TABLE AND WRITING THE SUMS & AVERAGES
TO IT */
IF ((OLD.GCTIP='C') AND (OLD.DEPOTRANS='0') ) THEN
BEGIN
SELECT SUM(MIKTAR*CARPAN) ,
AVG(FIYATNET/CARPAN),
SUM(MIKTAR*FIYATNET),
MAX(FIYATNET/CARPAN),
MIN(FIYATNET/CARPAN)
FROM POSHAR WHERE GCTIP='C' AND STOOTO=OLD.STOOTO INTO
:MTOPLAM,
:MORT,
:MORTAG,
:MHIGH,
:MLOW;
UPDATE STOK
SET TOPCIK=TOPCIK-(OLD.MIKTAR*OLD.CARPAN),
ORTSAT=:MORT,
ORTSATAG=:MORTAG/:MTOPLAM,
HIGHSATIS=:MHIGH,
LOWSATIS=:MLOW
WHERE OTONUM=OLD.STOOTO;
END
IF ((OLD.GCTIP='G') AND (OLD.DEPOTRANS='0') ) THEN
BEGIN
SELECT SUM(MIKTAR*CARPAN) ,
AVG(FIYATNET/CARPAN),
SUM(MIKTAR*FIYATNET),
MAX(FIYATNET/CARPAN),
MIN(FIYATNET/CARPAN)
FROM POSHAR WHERE GCTIP='G' AND STOOTO=OLD.STOOTO INTO
:MTOPLAM,
:MORT,
:MORTAG,
:MHIGH,
:MLOW;
UPDATE STOK
SET TOPGIR=TOPGIR-(OLD.MIKTAR*OLD.CARPAN),
ORTMAL=:MORT,
ORTMALAG=:MORTAG/:MTOPLAM,
HIGHALIS=:MHIGH,
LOWALIS=:MLOW
WHERE OTONUM=OLD.STOOTO;
END
END
[Non-text portions of this message have been removed]