Insert triggerben select az érintett táblára (MySQL)

Sziasztok,

Insert előtt szeretném az új sor adatait összevetni a már meglévő adatokkal egy táblában.

A MUNKAFOLYAMAT táblán ülő before insert triggerben van a következő utasítás.

SELECT sum(mennyiseg)-new.mennyiseg INTO eredmeny FROM (SELECT munkafazisnev AS megnevezes,(mennyiseg*-1) AS mennyiseg FROM MUNKAFOLYAMAT WHERE rendeles=new.rendeles AND ablaknev=new.ablak AND munkafazisnev=new.munkafazisnev UNION ALL SELECT codice AS megnevezes,qta AS mennyiseg FROM FPPRO32COMMESSE,FPPRO32PREVENTIVOACCESSORI WHERE nome=nomecommessa AND FPPRO32COMMESSE.voce=FPPRO32PREVENTIVOACCESSORI.voce AND nome=new.rendeles AND label=new.ablak AND codice=new.munkafazisnev) AS T GROUP BY megnevezes;
...
IF eredmeny<0 THEN
...
END IF;
...

Felparaméterezve az utasítás hozza a kívánt eredményt.
Ugyanazon paraméterekkel a triggerben viszont NULL kerül a 'eredmeny' változóba, majd továbblép.

Mi a megoldás?

Hozzászólások

A feleségem azt mondja, hogy az insert triggeren belül nem kérdezhetem le az érintett táblát.

Úgy tűnik igaza van! mint mindíg :-)

De miért? Szerintem ez nem egy különleges feladat.

Létezik erre valami elegáns megoldás/feature anélkül, hogy egy külön táblába vezetném a releváns adatokat majd a triggerből azt kérdezném le?

Igaza van, nem szép dolog, amit szeretnél. A változás alatt álló táblát a saját triggeréből nem lehet lekérdezni, és ezt az adatbáziskezelők többsége így csinálja.
Az ok az eredmény nem teljes determinisztikussága, hiszen egyrészt a lekérdezéskor mi legyen az aktuálisan beszúrni kívánt sorral (szerepeljen-e vagy sem), másrészt mi legyen az ugyanazon utasítás által befolyásolt többi sorral?

Például egy bulk insert, ami több sort szúr be egy utasítással, hogy viselkedjen ilyen esetben?

Kerülő megoldás lehet, ha az alkalmazáslogika megengedi, hogy egy utatításszintű triggert használj a sorszintű helyett.