




Mysql Hatası: Can't Update Table İn Stored Function/Trigger
-
Mysql'e tam olarak hakim değilim, trigger ve referanslar kullanarak bazı değerleri güncel tutmaya çalışıyorum. Ama delete esnasında triger kullandığım da başlıkta ki hatayı alıyrum, birkaç şey denedim ama çözümü bulamadım. İlgili tablolarım
Sale(Serial_no,Car_price_Sale_price.....)
SelectedOption(Seiral_no,Price....)
SelectedPackage(Serial_no,Price....)
Car(Serial_no,....)
selectedoption ve selectedpackage tablalarıma kayıt girdiğimde, sildiğimde yada güncellediğim de ilgili trigger'larla Sale tablomda ki Sale_price değerimi güncelliyorum. Buraya kadar problem yok.
Sale tablomda ki değer silindiğin de selectedoption ve selectedpackage değerleride silinmesi lazım. Serial_no car tablosunu referans ettiğinden Sale tablosuna ikinci bi referans veremiyorum.
Bende after delete trigerda ilgili selected option ve package'ları sildirmeyi deniyorum. Ama aşağıda ki hatayı alıyorum.
1442 - Can't update table 'sale' in stored function/trigger because it is already used by statement which invoked this stored
-
Hacı burda dediğine göre: http://dev.mysql.com/doc/refman/5.1/en/faqs-triggers.html#qandaitem-B-5-1-9
"A trigger can access both old and new data in its own table. A trigger can also affect other tables, but it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."
Geçici çözüm için: UPDATE statement'ini fonksiyona koyup, trigger'ında çağır demişler. Denemen gerekecek.
Benzer hatalar için: http://stackoverflow.com/questions/tagged/mysql-error-1442
-
update trigerını değilde delete'i bi procedure koymuştum, deniyim onu da.
edit: yok procedure'de olmadı, farklı bi çözüm yoluna gitmem lazım sanırım. Sale'i sildikten sonra option'ları da sildirmeye çalışyorum, option'larda da silme sırasında silinen sale'in price'inı güncellemeye çalışyor buna da izin vermiyor db.
Ercan tarafından 23/Ara/13 23:42 tarihinde düzenlenmiştir -
Evet DELETE'i gördüm fakat UPDATE için 1442 hatası almadan geçici çözüm olarak onu belirtmişler.
Çünkü;
__________
MySQL'in o operasyona desteği olmadığı için çözüm için yapısal değişikliğe gitmen gerekecek.
http://forums.mysql.com/read.php?99,144288,162197#msg-162197
"You cannot DELETE rows in the table that activated trigger."
-
outmost bunu yazdı
Evet DELETE'i gördüm fakat UPDATE için 1442 hatası almadan geçici çözüm olarak onu belirtmişler.
Çünkü;
__________
MySQL'in o operasyona desteği olmadığı için çözüm için yapısal değişikliğe gitmen gerekecek.
http://forums.mysql.com/read.php?99,144288,162197#msg-162197
"You cannot DELETE rows in the table that activated trigger."
bu arada seni yanlış anlamışım bi önceki post'unda funtion içinde kullan demişsin ben procedure'de denedim, gerçi yine thread bakımından aynıdır.
edit: sorunu düzelti, after ve before triger'ların mantığını yanlış kurmuşum. Procedure ve funktion çözüm olmuyor.
yardımın için teşekkürler hocam.
Ercan tarafından 24/Ara/13 00:33 tarihinde düzenlenmiştir