MySQL Cursor Kullanımı

Cursor; Türkçe adıyla imleç yada işaretçi, bir veri seti içerisinde o andaki satırı işaret etmektedir. Örneğin kullanıcılar tablosunda aktif olan kullanıcıları çekerek her bir kullanıcı bilgisine satır satır ulaşıp, bu bilgilere göre işlemler yapabiliriz.

Mysql’de cursor’lar stored procedure’lar ve fonksiyonlar içerisinde kullanabilirler.

Bir örnek ile pekiştirecek olursak:

Yeni bir stored procedure oluşturarak işe başlayalım.

				
					CREATE PROCEDURE `prcCursor_Ornek` ()
BEGIN
	declare iDone int;  
    declare crs_ID int;
    declare crs_ad varchar(50);
    declare crs_soyad varchar(50);
    
    block_cursor: BEGIN
	DECLARE pcuUsers CURSOR FOR	
    select ID, ad, soyad from kullanicilar where active = 1;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET iDone = 1;
	SET iDone = 0;
		 OPEN pcuUsers;
		 lUserIterator: LOOP
			 FETCH pcuUsers 
			 INTO crs_ID, crs_ad, crs_soyad;
			 IF 1 = iDone THEN
				 LEAVE lUserIterator;
			 END IF; 
             
             update kullanicilar set email = concat(crs_ad, '.', crs_soyad, '@ismailaktas.com')
             where ID = crs_ID;
             
		END LOOP lUserIterator;
		CLOSE pcuUsers;                 
	END block_cursor;              
    
END
				
			

Yukarıdaki örnekte öncelikle gerekli deklarasyonları yaparak değişken tanımlarını yapıyoruz. Burada dikkat edilmesi gereken bazı noktalar var. 

Cursor’da ifade edilen her bir alan(field)’ın karşılığı olacak bir değişken olmalı ve bu değişkenin de veri tipi cursor’dan gelen alanın veri türü ile aynı olmalıdır.

Örnekte göreceğiniz üzere; ID = crs_ID, ad = crs_ad, soyad = crs_soyad eşleşmesi sağlanmış ve veri tiplerinin de aynı olduğu gözlemlenmiştir.

8. satırda Cursor’ı içinde barındıracak bir block alan yapılmış ve tüm kod bu alanın içerisine dahil edilmiş. Bu zorunlu değildir ama kod okunurluğu ve kodu diğer kodlardan izole etmek için kullanışlı bir yöntemdir.
9. satırda cursor tanımlanıyor
10. satırda kayıt setinin oluşturulacağı sorgu yazılıyor. Burada aktif durumda olan kullanıcılar çekiliyor.
11. Herhangi bir kayıt bulunamadığında iDone değişkenine 1 atanıyor.
12. iDone = 0 yapılarak sorun olmadığında döngünün devam etmesi sağlanıyor.
13. Cursor açılıyor ve Loop işlemi başlıyor. Loop lUserIterator isimli bir değişken ile işaretleniyor.
15. Cursor’daki veriler Fecth komutu ile çekiliyor.
16. kayıt setindeki alanlar yukarıda tanımlanan değişkenlere atanıyor. Burada aynı sırada ve aynı veri tipinde olması çok önemlidir.
17. Eğer kayıt seti sonuna ulaşıldıysa yani cursor son satırı da döndüyse leave  komutu ile loop (döngü) dan çıkılıyor.
21. Cursor’ların genel kullanım amacı çekilen veri setini satır satır dönerek çeşitli amaçlar için kullanmaktır. Burada da kullanıcının adı, soyadı ve @ismailaktas.com bilgileri concat komutu birleştirilerek kullanici tablosundaki email alanına atılıyor.

Burada verdiğim örneği başka yöntemlerle hatta çok daha kolay da yapabilirdik. Amaç cursor’ların mantığını anlamak 🙂

Umarım faydalı olmuştur.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Paylaş
Share on facebook
Share on twitter
Share on linkedin
Share on pinterest
Share on skype
Share on whatsapp
Share on email
Share on print