PL / SQL - İmleçler
Bu bölümde imleçleri PL / SQL'de tartışacağız. Oracle, bir SQL ifadesini işlemek için bağlam alanı olarak bilinen ve ifadeyi işlemek için gereken tüm bilgileri içeren bir bellek alanı oluşturur; örneğin, işlenen satır sayısı vb.
Bir cursorbu bağlam alanına bir göstericidir. PL / SQL, bağlam alanını bir imleç aracılığıyla kontrol eder. Bir imleç, bir SQL ifadesi tarafından döndürülen satırları (bir veya daha fazla) tutar. İmlecin tuttuğu satır kümesineactive set.
Bir imleci adlandırabilirsiniz, böylece bir programda, SQL deyimi tarafından döndürülen satırları birer birer almak ve işlemek için başvurulabilir. İki tür imleç vardır -
- Örtülü imleçler
- Açık imleçler
Örtülü İmleçler
Örtük imleçler, ifade için açık bir imleç olmadığında, bir SQL ifadesi çalıştırıldığında Oracle tarafından otomatik olarak oluşturulur. Programcılar örtük imleçleri ve içindeki bilgileri kontrol edemez.
Bir DML ifadesi (INSERT, UPDATE ve DELETE) her yayınlandığında, bu ifadeyle örtük bir imleç ilişkilendirilir. INSERT işlemleri için imleç, eklenmesi gereken verileri tutar. GÜNCELLEME ve SİLME işlemleri için, imleç etkilenecek satırları tanımlar.
PL / SQL'de, en son örtük imlece şu şekilde başvurabilirsiniz: SQL cursor, her zaman gibi özelliklere sahip olan %FOUND, %ISOPEN, %NOTFOUND, ve %ROWCOUNT. SQL imlecinin ek özellikleri vardır,%BULK_ROWCOUNT ve %BULK_EXCEPTIONSile kullanılmak üzere tasarlanmıştır FORALLBeyan. Aşağıdaki tablo en çok kullanılan özniteliklerin açıklamasını sağlar -
S.No | Öznitelik ve Açıklama |
---|---|
1 | %FOUND INSERT, UPDATE veya DELETE ifadesi bir veya daha fazla satırı etkilediyse veya SELECT INTO ifadesi bir veya daha fazla satır döndürdüyse TRUE döndürür. Aksi takdirde YANLIŞ döndürür. |
2 | %NOTFOUND % FOUND'un mantıksal zıttı. INSERT, UPDATE veya DELETE ifadesi hiçbir satırı etkilemezse veya SELECT INTO ifadesi satır döndürmezse TRUE döndürür. Aksi takdirde YANLIŞ döndürür. |
3 | %ISOPEN Örtük imleçler için her zaman FALSE döndürür, çünkü Oracle, ilişkili SQL deyimini çalıştırdıktan sonra SQL imlecini otomatik olarak kapatır. |
4 | %ROWCOUNT INSERT, UPDATE veya DELETE ifadesinden etkilenen veya SELECT INTO ifadesiyle döndürülen satırların sayısını döndürür. |
Herhangi bir SQL imleç niteliğine şu şekilde erişilecektir: sql%attribute_name aşağıdaki örnekte gösterildiği gibi.
Misal
Önceki bölümlerde oluşturduğumuz ve kullandığımız MÜŞTERİLER tablosunu kullanacağız.
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
Aşağıdaki program tabloyu güncelleyecek ve her müşterinin maaşını 500 artıracak ve SQL%ROWCOUNT etkilenen satır sayısını belirlemek için özellik -
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN
dbms_output.put_line('no customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
END;
/
Yukarıdaki kod SQL isteminde yürütüldüğünde, aşağıdaki sonucu üretir -
6 customers selected
PL/SQL procedure successfully completed.
Müşteriler tablosundaki kayıtları kontrol ederseniz, satırların güncellendiğini göreceksiniz -
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2500.00 |
| 2 | Khilan | 25 | Delhi | 2000.00 |
| 3 | kaushik | 23 | Kota | 2500.00 |
| 4 | Chaitali | 25 | Mumbai | 7000.00 |
| 5 | Hardik | 27 | Bhopal | 9000.00 |
| 6 | Komal | 22 | MP | 5000.00 |
+----+----------+-----+-----------+----------+
Açık İmleçler
Açık imleçler, üzerinde daha fazla kontrol elde etmek için programcı tanımlı imleçlerdir. context area. PL / SQL Bloğunun bildirim bölümünde açık bir imleç tanımlanmalıdır. Birden fazla satır döndüren bir SELECT İfadesi üzerinde oluşturulur.
Açık bir imleç oluşturmanın sözdizimi -
CURSOR cursor_name IS select_statement;
Açık bir imleçle çalışmak aşağıdaki adımları içerir -
- Hafızayı başlatmak için imlecin bildirilmesi
- Hafızayı ayırmak için imleci açma
- Verileri almak için imleci getirme
- Ayrılan belleği serbest bırakmak için imleci kapatma
İmleci Bildirmek
İmlecin bildirilmesi, imleci bir adla ve ilişkili SELECT deyimiyle tanımlar. Örneğin -
CURSOR c_customers IS
SELECT id, name, address FROM customers;
İmleci Açma
İmleci açmak, imleç için hafızayı tahsis eder ve onu, SQL ifadesi tarafından döndürülen satırların içine getirilmesi için hazır hale getirir. Örneğin, yukarıda tanımlanan imleci aşağıdaki gibi açacağız -
OPEN c_customers;
İmleci Getirme
İmleci getirmek, her seferinde bir satıra erişmeyi içerir. Örneğin, yukarıda açılan imleçten satırları aşağıdaki gibi alacağız -
FETCH c_customers INTO c_id, c_name, c_addr;
İmleci Kapatma
İmlecin kapatılması, tahsis edilen hafızanın serbest bırakılması anlamına gelir. Örneğin, yukarıda açılan imleci aşağıdaki gibi kapatacağız -
CLOSE c_customers;
Misal
Aşağıda, açık imleçler & minua; kavramlarını göstermek için eksiksiz bir örnek verilmiştir.
DECLARE
c_id customers.id%type;
c_name customer.name%type;
c_addr customers.address%type;
CURSOR c_customers is
SELECT id, name, address FROM customers;
BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, c_name, c_addr;
EXIT WHEN c_customers%notfound;
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
END LOOP;
CLOSE c_customers;
END;
/
Yukarıdaki kod SQL isteminde yürütüldüğünde, aşağıdaki sonucu üretir -
1 Ramesh Ahmedabad
2 Khilan Delhi
3 kaushik Kota
4 Chaitali Mumbai
5 Hardik Bhopal
6 Komal MP
PL/SQL procedure successfully completed.