PL/SQL Ders14 - Cursor


   SQL ifadesi işlendiğinde Oracle context area denilen bir bellek bölgesi oluşturur. Bir cursor işte bu bellek bölgesine işaret eder. Cursor ifadenin işlenmesi için gerekli tüm bilgileri içerir. PL/SQL'de context area, cursor tarafından kontrol edilir. Cursor veri satırlarını ve select ifadeleri üzerindeki bilgileri içerir.

Bir cursor SQL ifadeleri ile döndürülen saturları işlemek , fetch etmek (getirmek) için kullanılır.
İki tip cursor vardır.
  • Implicit Cursor (örtülü)
  • Explicit Cursor (açık)
Implicit Cursor (örtülü)


Implicit Cursor (örtülü) Oracle tarafından  SQL ifade çalıştırıldığında eğer explicit cursor (açık) kullanılmıyorsa otomatik olarak oluşturulur.

INSERT, UPDATE, DELETE gibi DML ifadeleri çalıştırıldığında Oracle tarafından oluşturulan attributeler şunlardır.
  • %FOUND : Eğer DML ifadelerinden oluşturulan komutlardan etkilenen bir satır varsa veya select ifadelerinden oluşturulan komutlardan geriye dönen en az bir satır varsa geriye true döndürür. Yoksa false döndürür.
  • %NOTFOUND : Eğer DML ifadelerinden oluşturulan komutlardan etkilenen bir satır varsa veya select ifadelerinden oluşturulan komutlardan geriye dönen en az bir satır varsa geriye false döndürür. Yoksa true döndürür.
  • %ISOPEN : Implicit cursor için her zaman false döndürür. Çünkü implicit cursorda SQL cursor  işlem yapıldıktan sonra hemen kapatılır.
  • %ROWCOUNT : DML ifadelerinden oluşturulan komutlarda kaç satırın etkilendiğini geri döndürür.
test.sql
CREATE TABLE test_personel(id int,ad varchar(20));
INSERT INTO test_personel VALUES(1,'enes1');
INSERT INTO test_personel VALUES(2,'enes2');
INSERT INTO test_personel VALUES(3,'enes3');
INSERT INTO test_personel VALUES(4,'enes4');
INSERT INTO test_personel VALUES(5,'enes5');
INSERT INTO test_personel VALUES(6,'enes6');
INSERT INTO test_personel VALUES(7,'enes7');
INSERT INTO test_personel VALUES(8,'enes8');
INSERT INTO test_personel VALUES(9,'enes9');
INSERT INTO test_personel VALUES(10,'enes10');

Worksheet14.sql
DECLARE
BEGIN
UPDATE test_personel
SET id=id+10
WHERE id>5;
IF SQL%NOTFOUND
THEN
 dbms_output.put_line('islem basarisiz..');
ELSIF SQL%FOUND
THEN 
 dbms_output.put_line('islem basarili..');
END IF;
dbms_output.put_line('degistirilen satir sayisi : '||SQL%ROWCOUNT);
END;

PL/SQL Cursor

PL/SQL Cursor

PL/SQL Cursor

Explicit Cursor (açık)

Explicit Cursor (açık) programcı tarafından context area üzerinde daha fazla kontrole sahip olmak için tanımlanır. Bu cursor PL/SQL bloğunun declaration kısmında tanımlanmalıdır.

Cursor ile işlemler 4 aşamada gerçekleşir.
  1. Cursor oluşturma
  2. Cursoru açma
  3. Cursorla veri çekme
  4. Cursoru kapatma.
1. Cursor oluşturma


CURSOR cursorIsmi IS
SelectSorgusu;


2. Cursoru açma


OPEN cursorIsmi;


3. Cursorla veri çekme


FETCH cursorIsmi INTO
degiskenListesi


4. Cursoru kapatma


CLOSE cursorIsmi;


Worksheet14_2.sql

DECLARE
 id test_personel.id%type;
 ad test_personel.ad%type;
 CURSOR crsr IS
  SELECT * FROM test_personel;
BEGIN
 OPEN crsr;
 LOOP
  FETCH crsr into id,ad;
  EXIT WHEN crsr%notfound;
   dbms_output.put_line(id || ' ' || ad ); 
 END LOOP;
 CLOSE crsr;
END;


PL/SQL Cursor

Yorumlar

Bu blogdaki popüler yayınlar

Java SE Ders24 - Composition (Kompozisyon)

Spring Ders20 - Aspect Oriented Programming - AspectJ Annotation Style

JSF Ders30 - Page Template (Sayfa Şablonu)