Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
23 gösterim
Oracle veritabanında bahsedilen cursor nedir? nasıl kullanılır?
Veri Tabanı kategorisinde (570 puan) sordu

1 cevap

0 oy

Basit olarak anlatmak gerekirse; veri tabanındaki kayıltarı gösteren bir pointer olarak geçiyor. Bir sorgu verip o sorgunun sonucunda elimize gelecek olan kayıtların hepsinin pointerlarını bir diziye atıp sonra onun üzerinde tek tek işlem yapabiliyoruz. 

İki farklı şekilde tanımlanıyor 

1- implicit (üstü kapalı) : 

Herhangi bir insert/update/select/delete işlemi çalıştırıldığında otomatik olarak açılıp kapanır. 

for r in (select * from uyeler)
loop
 ............
end loop;

Burada bir döngü oluşturulup içinde tek tek kayıtlar ile çalışılacak şekilde ayarlanmış. Burada belirli bir şekilde cursor kullanmıyoruz, for döngüsü açıldığı zaman cursor açılıyor, loop-end loop arasında işlemler yapılıyor. Normal veya exit komutu kullanılarak döngüden çıkılırsa cursor kapatılıyor. Ben bu yöntemi tercih ediyorum :) daha kolay.

2- explicit (açık bir şekilde):

Önce çalışılacak veri kümesi için tanımlama yapılmalı

CURSOR cursor_adi IS select * from uyeler;
Daha sonra bu cursor açılmalı
OPEN cursor_adi;
Sonra her bir kayıt cursor içinden çekilip değişkenlere konulmalı
FETCH cursor_adi INTO isim, soyisim, no;
Kayıt kalmadıysa çıkılabilir
EXIT WHEN cursor_adi%NOTFOUND;
İşimiz bittiği zaman kapatmamız lazım
CLOSE cursor_adi;

Bu aşamalara örnek vermek için aşağıdaki koda bakabiliriz.

DECLARE 
   no uye.no%type; 
   isim uye.isim%type; 
   soyisim uye.soyisim%type; 
   CURSOR uyeler is 
      SELECT no, isim, soyisim FROM uye; 
BEGIN 
   OPEN uyeler; 
   LOOP 
   FETCH uyeler into no, isim, soyisim; 
      EXIT WHEN uyeler%notfound; 
      dbms_output.put_line(no || ' ' || isim || ' ' || soyisim); 
   END LOOP; 
   CLOSE uyeler;
END;
(3.3k puan) cevapladı
açık ve kapalı arasında performans farkı olur mu peki?

İlgili sorular

0 oy
1 cevap 24 gösterim
+1 oy
1 cevap 32 gösterim
+1 oy
0 cevap 11 gösterim
0 oy
1 cevap 7 gösterim
...