Autor | Zpráva | ||
---|---|---|---|
Pavlik Profil * |
#1 · Zasláno: 16. 5. 2014, 09:12:46
Dobrý den.
Mám dvě tabulky, TAB1 a TAB2, které mají stejnou strukturu (ID, IMEI, TYPE, VALUE, COMMANDID, STATE, ... a nějaký další zbytečnosti). Nyní potřebuji zavést funkci, kdy jakmile je záznam v TAB1 updatován na STATE=1, potřeboval bych se mrknout do TAB2, zda v ní není další záznam se stejným IMEI a pokud ano, tak aby jej vložil do TAB1. Zkoušel jsem vytvořit trigger na TAB1 (after update), ale ten mě nepustí vložit nový záznam do tabulky ze které byl spuštěn trigger (viz hláška: MySQL hlásí: Dokumentace #1442 - Can't update table 'TAB1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Přikládám trigger: DROP TRIGGER `tblUNITNEWCONFIG_after_upd_tr1`; CREATE DEFINER = 'configuser'@'localhost' TRIGGER `tblUNITNEWCONFIG_after_upd_tr1` BEFORE UPDATE ON `TAB1` FOR EACH ROW BEGIN IF ((NEW.TYPE=53) and (NEW.STATE=1)) THEN CALL `ADDCURRENTCONFIG`(NEW.IMEI); ELSEIF ((NEW.TYPE=53) and (NEW.STATE=3)) THEN DELETE FROM `TAB2` WHERE IMEI=NEW.IMEI; END IF; END; Funkce `ADDCURRENTCONFIG` se podívá do oné druhé tabulky TAB2 a pokud nalezne záznam se stejným IMEI, vloží jej do TAB1. Díky za pomoc. |
||
Kajman Profil |
#2 · Zasláno: 16. 5. 2014, 09:34:11
Řádkovým triggerem nemůžete modifikovat jiné řádky té stejné tabulky. Zkuste to udělat bez pomoci triggeru.
|
||
Pavlik Profil * |
#3 · Zasláno: 16. 5. 2014, 09:48:34
Kajman:
Kdybych věděl jak tak už to je udělané :). Nějaké nápady prosím ? :) |
||
Kajman Profil |
#4 · Zasláno: 16. 5. 2014, 10:21:46
Máte pod kontrolou všechna místa, odkud se může ten update volat? Co tam místo update např. zavolat uloženou proceduru, která udělá update a případně i insert?
|
||
Časová prodleva: 10 let
|
0