Firebird Trigger miert nem mukodik?

Firebird Trigger miert nem mukodik?
2013-09-28T12:43:55+02:00
2013-09-28T15:40:12+02:00
2022-11-29T19:15:33+01:00
M_Szabolcs
Sziasztok
Irtam egy triggert amely osszead.
Insert es Update eseteben megy de Delete esetebe nem
miert?

DECLARE VARIABLE MENY_OSSZ NUMERIC(9,2);
DECLARE VARIABLE MENY_AKTIV NUMERIC(9,2);
DECLARE VARIABLE MENY_INAKTIV NUMERIC(9,2);
BEGIN
MENY_OSSZ = 0;
MENY_AKTIV = 0;
MENY_INAKTIV = 0;
FOR SELECT SUM (MENNYISEG)
FROM TAG_ERDO
WHERE (TAG_ID=NEW.TAG_ID) AND (ERDO_ALLAPOT=2)
GROUP BY TAG_ID
INTO:MENY_INAKTIV
DO
UPDATE TAG
SET MENY_INAKTIV_ERDO =: MENY_INAKTIV
WHERE TAG_ID=NEW.TAG_ID;

FOR SELECT SUM (MENNYISEG)
FROM TAG_ERDO
WHERE (TAG_ID=NEW.TAG_ID) AND (ERDO_ALLAPOT=1)
GROUP BY TAG_ID
INTO:MENY_AKTIV
DO
UPDATE TAG
SET MENY_AKTIV_ERDO =: MENY_AKTIV
WHERE TAG_ID=NEW.TAG_ID;

FOR SELECT SUM (MENNYISEG)
FROM TAG_ERDO
WHERE (TAG_ID=NEW.TAG_ID)
GROUP BY TAG_ID
INTO:MENY_OSSZ
DO
UPDATE TAG
SET MENY_OSSZ_ERDO =:MENY_OSSZ
WHERE TAG_ID=NEW.TAG_ID;
END

Kiprobaltam ugy is hogy meg irtam egy triggert es NEW.TAG helyett OLD.TAG tettem es nem megy

Hol hibazok??
Mutasd a teljes hozzászólást!
Mikor az utolso rekordot torlom akkor a trigger nem szamol de addig igen !!! (Tehat megmarad az utolso rekord erteke ha az ki is van torolve).
Szerintem azért, mert NULL értéket kapsz az utolsó tétel törlése utáni SUM-ban vissza. Leválogatás után, UPDATE előtt vizsgáld meg a változót (pl: IF MENY_OSSZ IS NULL THEN MENY_OSSZ = 0;), vagy még a SELECT-ben tedd ezt meg:
SUM(MENNYISEG) helyett COALESCE(SUM(MENNYISEG),0)
Mutasd a teljes hozzászólást!

  • - Van hibaüzenet?
    - DELETE triggerben OLD.TAG_ID kell a NEW.TAG_ID helyett.
    - Nem lehet, hogy mégis lefut a triggered, csak az BEFORE és nem AFTER?
    Mutasd a teljes hozzászólást!
  • Alter_Ego jól mondta, DELETE triggerben nincsenek értelmezve a NEW, kizárólag az OLD kontextváltozók. Ennyi. Ha mindenképpen egy kódbázissal akarod megoldani, akkor vizsgáld le, hogy éppen milyen DML művelet váltotta ki a triggert, lásd: DELETING-INSERTING-UPDATING.
    Mutasd a teljes hozzászólást!
  • Szia
    Hibauzenet nincs
    Old.Tag el is kiprobaltam de ugyan azt kaptam.
    ugy kepzeltem el hogy az Insert es Update 1 kozos triggerbe kerul es a Delete egy masikba.
    After re van kapcsolva.

    Betettem a Deleteet egy kulon Triggerbe most mukodik egy kivetellel.
    Mikor az utolso rekordot torlom akkor a trigger nem szamol de addig igen !!! (Tehat megmarad az utolso rekord erteke ha az ki is van torolve).
    A ket trigger positionnal lenne a baj?
    Mindketto 0 positionnal szerepel!!
    Mutasd a teljes hozzászólást!
  • Mikor az utolso rekordot torlom akkor a trigger nem szamol de addig igen !!! (Tehat megmarad az utolso rekord erteke ha az ki is van torolve).
    Szerintem azért, mert NULL értéket kapsz az utolsó tétel törlése utáni SUM-ban vissza. Leválogatás után, UPDATE előtt vizsgáld meg a változót (pl: IF MENY_OSSZ IS NULL THEN MENY_OSSZ = 0;), vagy még a SELECT-ben tedd ezt meg:
    SUM(MENNYISEG) helyett COALESCE(SUM(MENNYISEG),0)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd