Hurriyet

12 Kasım 2012 Pazartesi

PL/SQL Ders 9



Cursor Nedir?

            Cursor’lar geçici çalışma alanları olarak bir SQL ifadesi çalıştırıldığında oluşturulurlar. Böyle bir cursor içinde select ifadesinin ve içindeki satırlarca veriyi içerir.  Bu alan sayesinde veritabanından kaydedilmiş bilgiler elde edilir. Bir cursor birden fazla satır bilgisini içinde tutabilir ancak her seferinde en fazla bir tane satır inceleyebilir. 2 tip cursor bulunmaktadır.

1)      Implicit (Üstü kapalı-Otomatik) Cursor : Bu cursor tipi, kullanılan bütün DML ifadeleri (select, insert, update, delete)  sırasında oluşturulan en fazla bir tane satır incelememizi sağlamaktadır.

2)      Explicit (Açık –Belirli) Cursor: Bunlar da birden fazla sonuç döndüren select ifadelerinde kullanılmaktadırlar.

Bu 2 cursor tipi aynı işleve sahiptirler ancak erişim biçiminde farklılık gösterirler.


Explicit Cursors
           
            Explicit cursor’lar PL/SQL bloğumuzun tanımlama kısmında yaratılırlar. Genel-
 de bir select ifadesi üzerinden yaratılırlar. Cursor’ımız için belirli bir ad tanımlayabiliriz.

Genel yazım biçimi:

Cursor cursor_adi is select_ifadesi;

·         Cursor_adi herhangi istediğimiz bir ad olabilir.
·         Select_ifadesi ise birden fazla satır sonuç döndüren bir ifade olacaktır.

Explicit Cursor’lar Nasıl Kullanılırlar?

Bu cursor’lar ilk önce tanımlanmalıdırlar.
Sonra cursor’lar açılmalıdır.
1.      Adımda cursor içindeki verilerimiz PL/SQL değişkenlerine aktarılmalıdırlar.
Son olarak da cursor kapatılmalıdır.
Cursor tanımlanmasına örnek olarak:

DECLARE
   CURSOR deneme_cur IS
   SELECT *
   FROM calisanlar
   WHERE maas> 5000;

                       
            Yukarıdaki örnekte çalışanlar tablosundan maaşı 5000’in üzerinde olan tüm 
çalışanları cursor içine atarız. Bir kere tanımladıktan sonra program bloğu içerisinde tekrar 
cursor’ımıza erişebiliriz.


1> DECLARE 
2>    rec1 tablo1%rowtype;
3>    CURSOR  cur1 IS 
4>    SELECT *
5>    FROM 
6>    WHERE maas > 1000; 
7> BEGIN 
8>    OPEN cur1; 
9>    FETCH cur1 INTO rec1; 
10>      dbms_output.put_line (rec1.first_name || '  ' || 
11>rec1.last_name); 
12>  CLOSE emp_cur; 
13> END; 
 
 

                        Yukarıdaki örneğimizde  maaşı 1000’den büyük olan çalışanlar bir cursor’a
 atanır. Sonrasında ise programın ana kısmında  bu cursor açılır ve buradan veri fetch 
edilerek oluşturduğumuz kayıt içine atılır.  Burada da rec1 içindeki eskiden tablo1 içinde 
olan first_name ve last_name kolonları alınır.Sonrasında da elde ettiğimiz verileri yazıp 
cursor’ımızı kapatırız.

Hiç yorum yok:

Yorum Gönder