Oracle PL/SQL İmleci: Örtülü, Açık, Örnekli Döngü İçin
⚡ Akıllı Özet
İmleçler Oracle PL/SQL'de, SQL sorgusu tarafından döndürülen satırları tutan bağlam alanına işaret eden göstericilerdir. İki türü vardır: DML için otomatik olarak oluşturulan örtük imleçler ve programcı tarafından tanımlanan ve kontrol edilen açık imleçler.

PL/SQL'de CURSOR nedir?
İmleç, bağlam alanına işaret eden bir göstericidir. Oracle bir işlemi işlemek için bir bağlam alanı oluşturur. SQL Bu açıklama, bu alanda açıklamayla ilgili tüm bilgileri içermektedir.
PL / SQL Programcının imleç aracılığıyla bağlam alanını kontrol etmesine olanak tanır. İmleç, SQL sorgusu tarafından döndürülen satırları tutar ve imlecin tuttuğu satır kümesine aktif küme denir. Bu imleçlere, kodun başka bir yerinden referans verilebilmesi için isim de verilebilir.
İmleç iki türdedir:
- örtük imleç
- Açık İmleç
örtük imleç
Ne zaman herhangi bir DML işlemi Veritabanında bir işlem gerçekleştiğinde, o işlemden etkilenen satırları tutan örtük bir imleç oluşturulur. Bu imleçlere isim verilemez ve bu nedenle kodun başka bir yerinden kontrol edilemez veya bunlara başvurulamaz. Yalnızca imleç öznitelikleri aracılığıyla en son imlece başvurabiliriz.
Açık İmleç
Programcılar, DML işlemlerini yürütmek ve üzerinde daha fazla kontrol sahibi olmak için adlandırılmış bir bağlam alanı oluşturabilirler. Açık imleç, bildirim bölümünde tanımlanmalıdır. PL/SQL bloğuVe bu, kodda kullanılması gereken SELECT sorgusu için oluşturulmuştur.
Aşağıda, açık imleçlerle çalışma adımları verilmiştir:
- İmleci tanımlama: İmleci tanımlamak, basitçe, bildirim bölümünde tanımlanan SELECT ifadesi için adlandırılmış bir bağlam alanı oluşturmak 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ırması talimatını verir. Bu, imleci kayıtları getirmeye hazır hale getirir.
- İmleçten veri alınıyor: Bu işlemde, SELECT ifadesi yürütülür ve getirilen satırlar ayrılan belleğe kaydedilir. Bunlara artık aktif kümeler denir. İmleçten veri getirme, kayıt düzeyinde bir işlemdir; yani verilere kayıt bazında erişebiliriz. Her getirme ifadesi bir aktif küme getirir ve o belirli kaydın bilgilerini tutar. Bu ifade, kaydı getiren ve INTO yan tümcesindeki değişkene atayan bir SELECT ifadesiyle aynıdır, ancak herhangi bir hata fırlatmaz. istisnalar.
- İmleci kapatma: Tüm kayıtlar alındıktan sonra, bu bağlam alanına ayrılan belleğin serbest bırakılması için imleci kapatmamız gerekiyor.
Sözdizimi
DECLARE CURSOR <cursor_name> IS <SELECT statement>; <cursor_variable declaration>; BEGIN OPEN <cursor_name>; FETCH <cursor_name> INTO <cursor_variable>; . . CLOSE <cursor_name>; END;
Yukarıdaki sözdiziminde, bildirim kısmı imlecin ve getirilen verilerin atanacağı imleç değişkeninin bildirimini içerir. İmleç, imleç bildiriminde verilen SELECT ifadesi için oluşturulur. Yürütme kısmında, bildirilen imleç açılır, veri getirilir ve kapatılır.
İmleç Nitelikleri
Hem örtük imleç hem de açık imleç, erişilebilen belirli özelliklere sahiptir. Bu özellikler, imleç işlemleri hakkında daha fazla bilgi verir. Aşağıda farklı imleç özellikleri ve kullanımları yer almaktadır.
| İmleç Özelliği | Açıklama |
|---|---|
| % BULUNAN | En son yapılan kayıt alma işlemi başarılı olursa TRUE, aksi takdirde FALSE Boolean sonucunu döndürür. |
| %BULUNAMADI | %FOUND'un tam tersi şekilde çalışır. En son veri çekme işlemi hiçbir kayıt getiremediyse TRUE değerini döndürür. |
| %AÇIK | Verilen imleç zaten açıksa TRUE, aksi takdirde FALSE Boolean sonucunu döndürür. |
| % ROWCOUNT | İşlemden etkilenen veya işlemin getirdiği kayıtların gerçek sayısını veren sayısal bir değer döndürür. |
İmlecin Açıkça Belirtilmiş Örneği: Bu örnekte, açık bir imleci nasıl tanımlayacağımızı, açacağımızı, getireceğimizi ve kapatacağımızı göreceğiz. İmleç kullanarak emp tablosundaki tüm çalışan isimlerini yansıtacağız. Ayrıca, imleçten tüm kayıtları getirmek için döngüyü ayarlamak üzere bir imleç özniteliği kullanacağız.
Aşağıdaki ekran görüntüsü, bu açık imleç örneğini ve çıktısını göstermektedir. Oracle.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; lv_emp_name emp.emp_name%type; BEGIN OPEN guru99_det; LOOP FETCH guru99_det INTO lv_emp_name; IF guru99_det%NOTFOUND THEN EXIT; END IF; Dbms_output.put_line('Employee Fetched:'||lv_emp_name); END LOOP; Dbms_output.put_line('Total rows fetched is'||guru99_det%ROWCOUNT); CLOSE guru99_det; END; /
Çıktı
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY Total rows fetched is 3
Code açıklama
- Code 2 hattı: 'SELECT emp_name FROM emp' sorgusu için guru99_det imleci tanımlanıyor.
- Code 3 hattı: lv_emp_name değişkenini şu şekilde tanımlıyoruz: % türü emp.emp_name'e sabitlenmiştir.
- Code 5 hattı: İmleci açma işlemi guru99_det ile gerçekleştiriliyor.
- Code 6 hattı: Temel döngü ifadesini, emp tablosundaki tüm kayıtları getirecek şekilde ayarlıyoruz.
- Code 7 hattı: guru99_det verilerini getirir ve değeri lv_emp_name değişkenine atar.
- Code 8 hattı: İmleçteki tüm kayıtların getirilip getirilmediğini kontrol etmek için imleç özniteliği olan %NOTFOUND kullanılır. Getirilmişse TRUE döndürülür ve kontrol döngüden çıkar; aksi takdirde kontrol, imleçten verileri getirmeye devam eder ve yazdırır.
- Code 10 hattı: Döngü ifadesi için EXIT koşulu.
- Code 12 hattı: Getirilen çalışanın adını yazdırın.
- Code 14 hattı: İmleç tarafından getirilen toplam kayıt sayısını bulmak için imleç özniteliği %ROWCOUNT kullanılır.
- Code 15 hattı: Döngüden çıkıldıktan sonra imleç kapatılır ve ayrılan bellek serbest bırakılır.
FOR Döngüsü İmleç ifadesi
bir imleç Döngü için İmleçlerle çalışmak için kullanılabilir. FOR döngüsü ifadesinde aralık sınırı yerine imleç adını verebiliriz, böylece döngü imlecin ilk kaydından son kaydına kadar çalışır. İmleç değişkeni, imlecin açılması, veri alınması ve imlecin kapatılması işlemleri FOR döngüsü tarafından örtük olarak gerçekleştirilir.
Sözdizimi
DECLARE CURSOR <cursor_name> IS <SELECT statement>; BEGIN FOR I IN <cursor_name> LOOP . . END LOOP; END;
Yukarıdaki sözdiziminde, bildirim kısmı 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 gibi davranır.
Oracle For döngüsü örneği için imleç kullanımı: Bu örnekte, imleç-FOR döngüsü kullanarak emp tablosundaki tüm çalışan isimlerini yansıtacağız.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; BEGIN FOR lv_emp_name IN guru99_det LOOP Dbms_output.put_line('Employee Fetched:'||lv_emp_name.emp_name); END LOOP; END; /
Çıktı
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY
Code açıklama
- Code 2 hattı: 'SELECT emp_name FROM emp' sorgusu için guru99_det imleci tanımlanıyor.
- Code 4 hattı: lv_emp_name döngü değişkenini kullanarak imleç için FOR döngüsünü oluşturma.
- Code 6 hattı: Döngünün her yinelemesinde çalışan adının yazdırılması.
- Code 7 hattı: Döngüden çık (END LOOP).
Not: İmleç-FOR döngüsünde, imlecin açılması, alınması ve kapatılması FOR döngüsü tarafından örtük olarak yapıldığından, imleç öznitelikleri kullanılamaz.

