PL / SQL'de CURSOR nedir?
İmleç, bu bağlam alanına bir göstericidir. Oracle, ifade hakkındaki tüm bilgileri içeren bir SQL ifadesini işlemek için bağlam alanı oluşturur.
PL / SQL, programcının imleç aracılığıyla bağlam alanını kontrol etmesine izin verir. Bir imleç, SQL ifadesi tarafından döndürülen satırları tutar. İmlecin tuttuğu satır kümesi, etkin küme olarak adlandırılır. Bu imleçler, kodun başka bir yerinden başvurulabilecek şekilde de adlandırılabilir.
Bu eğitimde öğreneceksiniz-
- Örtülü İmleç
- Açık İmleç
- İmleç Nitelikleri
- FOR Loop Cursor ifadesi
İmleç iki türdendir.
- Örtülü İmleç
- Açık İmleç
Örtülü İmleç
Veritabanında herhangi bir DML işlemi gerçekleştiğinde, söz konusu işlemde etkilenen satırları tutan örtük bir imleç oluşturulur. Bu imleçler adlandırılamaz ve bu nedenle kodun başka bir yerinden kontrol edilemez veya bunlara atıfta bulunulamazlar. İmleç öznitelikleri aracılığıyla yalnızca en son imlece başvurabiliriz.
Açık İmleç
Programcıların, üzerinde daha fazla kontrol elde etmek için DML işlemlerini yürütmek üzere adlandırılmış bağlam alanı oluşturmalarına izin verilir. Açık imleç, PL / SQL bloğunun bildirim bölümünde tanımlanmalıdır ve kodda kullanılması gereken 'SELECT' ifadesi için oluşturulur.
Aşağıda, açık imleçlerle çalışmaya dahil olan adımlar bulunmaktadır.
- İmleci bildirmek
İmlecin bildirilmesi, basitçe, bildirim bölümünde tanımlanan 'SELECT' ifadesi için adlandırılmış bir bağlam alanı yaratmak anlamına gelir. Bu bağlam alanının adı, imleç adıyla aynıdır.
- İmleci Açma
İmleci açmak, PL / SQL'e bu imleç için bellek ayırma talimatı verecektir. İmleci kayıtları almaya hazır hale getirecektir.
- İmleçten Veri Almak
Bu süreçte, 'SELECT' ifadesi yürütülür ve getirilen satırlar ayrılmış bellekte saklanır. Bunlar artık aktif kümeler olarak adlandırılıyor. İmleçten veri almak, kayıt düzeyinde bir etkinliktir, bu da verilere kayıtlara göre erişebileceğimiz anlamına gelir.
Her bir getirme ifadesi bir aktif kümeyi alır ve bu belirli kaydın bilgilerini tutar. Bu ifade, kaydı getiren ve 'INTO' yan tümcesindeki değişkene atayan 'SELECT' ifadesiyle aynıdır, ancak herhangi bir istisna atmayacaktır.
- İmleci Kapatma
Şimdi tüm kayıt getirildikten sonra, bu bağlam alanına ayrılan belleğin serbest bırakılması için imleci kapatmamız gerekir.
Sözdizimi:
DECLARECURSORIS
- Yukarıdaki sözdiziminde, bildirim bölümü, imlecin bildirimini ve getirilen verilerin atanacağı imleç değişkenini içerir.
- İmleç, imleç bildiriminde verilen 'SELECT' ifadesi için oluşturulur.
- Yürütme kısmında bildirilen imleç açılır, getirilir ve kapatılır.
İmleç Nitelikleri
Hem Örtük imleç hem de açık imleç, erişilebilen belirli özniteliklere sahiptir. Bu özellikler, imleç işlemleri hakkında daha fazla bilgi verir. Aşağıda farklı imleç nitelikleri ve kullanımları bulunmaktadır.
İmleç Özelliği | Açıklama |
%BULUNDU | En son getirme işlemi bir kaydı başarıyla getirdiyse Boole sonucunu 'TRUE' döndürür, aksi takdirde FALSE döndürür. |
%BULUNAMADI | Bu,% FOUND ile ters çalışır, en son getirme işlemi herhangi bir kaydı getiremezse 'TRUE' döndürür. |
%AÇIK | Verilen imleç zaten açıksa Boole sonucunu 'TRUE' döndürür, aksi takdirde 'FALSE' döndürür. |
% ROWCOUNT | Sayısal değeri döndürür. DML etkinliğinden etkilenen gerçek kayıt sayısını verir. |
Örnek 1 : Bu örnekte, açık imleci nasıl bildireceğimizi, açacağımızı, getireceğimizi ve kapatacağımızı göreceğiz.
İmleç kullanarak tüm çalışanın adını emp tablosundan yansıtacağız. Ayrıca, tüm kaydı imleçten almak üzere döngüyü ayarlamak için imleç özelliğini kullanacağız.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
Çıktı
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
Kod Açıklaması:
- Kod satırı 2 : 'SELECT emp_name FROM emp' ifadesi için imleç guru99_det'in bildirilmesi.
- Kod satırı 3 : Değişken lv_emp_name bildiriliyor.
- Kod satırı 5 : İmleç guru99_det'i açma.
- Kod satırı 6: Temel döngü deyiminin 'emp' tablosundaki tüm kayıtları getirecek şekilde ayarlanması.
- Kod satırı 7: guru99_det verilerini alır ve değeri lv_emp_name'ye atar.
- Kod satırı 9: İmleçteki tüm kaydın getirilip getirilmediğini bulmak için '% NOTFOUND' imleç özniteliğini kullanma. Alınırsa, 'TRUE' döndürür ve kontrol döngüden çıkar, aksi takdirde kontrol imleçten veriyi almaya devam eder ve veriyi yazdırır.
- Kod satırı 11: Döngü deyimi için EXIT koşulu.
- Kod satırı 12: Getirilen çalışanın adını yazdırın.
- Kod satırı 14: İmleçte etkilenen / getirilen kayıtların toplam sayısını bulmak için '% ROWCOUNT' imleç özelliğini kullanma.
- Kod satırı 15: Döngüden çıktıktan sonra imleç kapanır ve ayrılan bellek boşa bırakılır.
FOR Loop Cursor ifadesi
"FOR LOOP" ifadesi imleçlerle çalışmak için kullanılabilir. FOR döngü deyiminde aralık sınırı yerine imleç adını verebiliriz, böylece döngü, imlecin ilk kaydından imlecin son kaydına kadar çalışacaktır. İmleç değişkeni, imlecin açılması, imlecin getirilmesi ve kapatılması, FOR döngüsü tarafından dolaylı olarak yapılacaktır.
Sözdizimi:
DECLARECURSORIS
- Yukarıdaki sözdiziminde, bildirim bölümü imlecin bildirimini içerir.
- İmleç, imleç bildiriminde verilen 'SELECT' ifadesi için oluşturulur.
- Yürütme kısmında, bildirilen imleç FOR döngüsünde kurulur ve bu durumda döngü değişkeni 'I' imleç değişkeni olarak davranacaktır.
Örnek 1 : Bu örnekte, bir cursor-FOR döngüsü kullanarak emp tablosundaki tüm çalışan adını yansıtacağız.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/
Çıktı
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY
Kod Açıklaması:
- Kod satırı 2 : 'SELECT emp_name FROM emp' ifadesi için imleç guru99_det'in bildirilmesi.
- Kod satırı 4 : Döngü değişkeni lv_emp_name ile imleç için 'FOR' döngüsünün oluşturulması.
- Kod satırı 5: Döngünün her yinelemesinde çalışan adının yazdırılması.
- Kod satırı 8: Döngüden çıkın
Not: İmleç-FOR döngüsünde, imlecin açılması, getirilmesi ve kapatılması örtük olarak FOR döngüsü tarafından yapıldığından imleç nitelikleri kullanılamaz.