MySQL İmleç Nedir?
MySQL’de imleç (cursor), bir SQL sorgusunun sonuç kümesi üzerinde satır satır işlem yapılmasını sağlayan bir yapıdır. İmleçler, özellikle birden fazla satır döndüren sorgularda her bir satır üzerinde ayrı ayrı işlem yapılması gerektiğinde kullanışlıdır. Standart SQL işlemleri, tüm sonuç kümesinin tek seferde işlenmesini sağlar; ancak bazı durumlarda satır bazında işleme ihtiyaç olabilir. Bu tür durumlarla başa çıkmak için imleç kullanımı tercih edilir.
İmleç Oluşturma Adımları
MySQL’de bir imleç oluşturmanın birkaç adımı vardır. İlk olarak, bir imleç tanımlamak gerekir. İmleç, genellikle bir depolanmış prosedür (stored procedure) içinde yaratılır ve çalıştırılır. Depolanmış prosedür içinde, ilgili SQL sorgusu ile birlikte imleç tanımlanır.
“`sql
DECLARE cursor_name CURSOR FOR
SELECT column1, column2 FROM table_name WHERE condition;
“`
Burada `cursor_name`, oluşturulacak imlecin adıdır ve sorgunun sonucunu döndüren bir `SELECT` ifadesi kullanılarak imleç tanımlanır.
İmleç Kullanımında Önemli Adımlar
Bir imleç oluşturulduktan sonra, onu başlatmak, işlem yapmak ve sonuçları almak için birkaç adım daha izlenmelidir. Aşağıda bu adımlar özetlenmiştir:
1. İmleci Açma (OPEN): İmleci açmak, sonuç kümesine erişim sağlar.
“`sql
OPEN cursor_name;
“`
2. Satırları Okuma (FETCH): İmlecin satırlarını okumak için `FETCH` ifadesi kullanılır. Bu işlem, imleçteki bir sonraki satırı almak için uygulanır.
“`sql
FETCH cursor_name INTO variable1, variable2;
“`
3. İşlem Yapma: Asıl işlemlerin yapıldığı aşamadır. Her bir fetched sonuç için gereken işlemler gerçekleştirilir.
4. İmleci Kapatma (CLOSE): İmleç kullanımı sona erdiğinde kapatılmalıdır.
“`sql
CLOSE cursor_name;
“`
5. Belleği Temizleme (DEALLOCATE): İmleç kullanılmıyorsa, bellek alanını serbest bırakmak amacıyla `DEALLOCATE` komutu kullanılmalıdır.
“`sql
DEALLOCATE cursor_name;
“`
Örnek Kullanım
Aşağıda bir imlecin nasıl kullanılacağına dair basit bir örnek verilmiştir. Örnekte, `employees` tablosundaki çalışanların ad ve maaş bilgilerinin okunduğu bir imleç tanımlanmıştır.
“`sql
DELIMITER //
CREATE PROCEDURE process_employees()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE emp_name VARCHAR(100);
DECLARE emp_salary DECIMAL(10, 2);
DECLARE employee_cursor CURSOR FOR
SELECT name, salary FROM employees WHERE active = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN employee_cursor;
read_loop: LOOP
FETCH employee_cursor INTO emp_name, emp_salary;
IF done THEN
LEAVE read_loop;
END IF;
— Burada emp_name ve emp_salary üzerinde işlem yapılabilir
SELECT CONCAT(‘Name: ‘, emp_name, ‘, Salary: ‘, emp_salary);
END LOOP;
CLOSE employee_cursor;
END //
DELIMITER ;
“`
Bu örnekte, `process_employees` adında bir depolanmış prosedür oluşturulmuştur. Bu prosedür, `employees` tablosundaki aktif çalışanların isimlerini ve maaşlarını okur ve her bir satır için belirli bir işlem yapar.
İmleç Kullanımına Dikkat Edilmesi Gerekenler
MySQL imleçleri kullanılırken bazı noktaların dikkate alınması önemlidir:
– İmleçler, performans açısından dikkatli kullanılmalıdır. Çünkü her bir `FETCH` işlemi, veritabanı ile iletişim gerektirir ve bu da performansı etkileyebilir.
– İmleç içerisinde yapılacak işlemler mümkün olduğunca optimize edilmelidir. Gereksiz hesaplamalar, döngü içinde yapılmamalıdır.
– İmleçlerin kapatılmadığı durumlar, bellek sızıntısına yol açabilir. Bu nedenle, imleç kullanımından sonra `CLOSE` ve `DEALLOCATE` komutları her zaman uygulanmalıdır.
Alternatif Yöntemler
Eğer satır satır işleme ihtiyacı yoksa ve işlem yapılacak veri seti küçükse, standart `SELECT` sorguları yeterli olabilir. Ancak büyük veri setlerinde ve karmaşık süreçlerde imleçler kullanışlıdır. Geçici tablolar veya geçici sonuç kümesi ile de bazı işlemler gerçekleştirilebilir; ancak imleçler, daha karmaşık senaryolar için etkili bir çözümdür.
MySQL imleçleri, veritabanındaki veriler üzerinde daha fazla kontrol ve esneklik sağlayarak, ihtiyaç duyulduğunda satır bazında işlem yapmayı mümkün kılar.


