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.