Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
güncellenen tablo içerisine triger
#1
Merhabalar, güncelleme yapılan tablo içerisinde trigger çalıştırılabilir mi? 
örneğin personel tablosuna veri yüklemesi yaparken (Excel olarak veya el ile ) bazı alanlarda veri girişi varsa durum alanı  0 yada 1 olmasını sağlamak istiyorum bunu da trigger ile yapabileceğimi düşündüm ancak 
"can't update table personel in stored function/trigger because it is alreay used by statement which invoked this stored function/trigger" hatası alıyorum. 
nasıl bir yol izlemeliyim yardımcı olabilir misiniz...
Cevapla
#2
Selamlar,
Bir trigger içinden aynı tabloyu güncelleyemezsiniz. Bu sonsuz bir kendini çağıran procedure haline döner. Yani trigger içinden update yaptığınızda yine trigger çalışacaktır ve yine bu update çalışır ve trigger yine tetiklenir ve bu sonsuza kadar gider. Yani muhtemelen bir süre sonra sunucu kilitlenir. Bu işi yapmak için başka bir yol bulmalısınız. Örneğin insert, update'i Stored Procedure içinde yaparsınız ve alan değerlerini burada kontrol eder ona göre tabloya yazdırırsınız. Bu hem de sizi programlama açısından standartlara biraz daha yakınlaştırmış olur!
Cevapla
#3
Neden güncelleme yaptıkdan sonra updateinizi yapmıyorsunuz?
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#4
(27-09-2022, Saat: 23:06)cvheneburi Adlı Kullanıcıdan Alıntı: Merhabalar, güncelleme yapılan tablo içerisinde trigger çalıştırılabilir mi? 
örneğin personel tablosuna veri yüklemesi yaparken (Excel olarak veya el ile ) bazı alanlarda veri girişi varsa durum alanı  0 yada 1 olmasını sağlamak istiyorum bunu da trigger ile yapabileceğimi düşündüm ancak 
"can't update table personel in stored function/trigger because it is alreay used by statement which invoked this stored function/trigger" hatası alıyorum. 
nasıl bir yol izlemeliyim yardımcı olabilir misiniz...

Merhaba , 
Anladığım kadarıyla, "personel" tablonuzu herhangi bir kanaldan güncellerken yine aynı "personel" tablosundaki alan yada alanlara duruma göre değer atamak istiyorsunuz örn: personel.adres alanına bilgi geldiyse personel.adres_geldi  gibi alana "1" değerini atamak istiyorsunuz eğer doğru anladıysam yapmanız gereken şu ;
Öncelikle "personel" tablosunun BEFORE UPDATE triggerini kullanmalısınız , MySQL de trigger lar her bir satır için ayrı ayrı çalışır bu sebeple trigger içinden NEW tablosunda UPDATE işleminden sponraki değer OLD tablosunda da update işleminden önceki satır değerleri bulunur (tablo diyorum ama her zaman tek satır yer alır) siz şöyle bir kontrol yapmalısınız ;
SET NEW.adres_geldi = IF(NEW.adres <>"" , 1 , 0);

Böylece tablonun satırı henüz güncellenmeden önce gelen değerleri manüple edebilirsiniz.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Mysql tablo yedekleme powerghost 9 2.851 04-07-2021, Saat: 12:44
Son Yorum: Halil Han BADEM
  MySQL - SQL Tablo Kontrolü Halil Han BADEM 3 3.484 26-05-2018, Saat: 13:11
Son Yorum: Halil Han BADEM



Konuyu Okuyanlar: 1 Ziyaretçi