VARRAY aşağıdaki şekildende anlaşılacağı gibi birden fazla aynı tipte degişkeni bir dizi içinde hafızada(memory) ard arda tutan yapıdır(koleksiyon).

Array’ın faydasını anlamak için internette bulduğum bir örneği kullanacak olursak çok daha iyi anlaşılacağını düşünmekteyim; bir bilgisayar programı yaptığınızı düşünün. Kullanıcının 100 değer girmesi isteniyor. Girilen bütün bu sayıların farklı aşamalardan geçeceğini ve bu yüzden hepsini ayrı bir değişkende tutmamız gerektiğini varsayalım. Bu durumda ne yapardınız? a0, a1, a2, …, a99 şeklinde 100 tane değişken tanımlamak elbette mümkün; ama oldukça zahmetli olurdu. Sırf değişkenleri tanımlarken kaybedeceğiniz zamanı düşünürseniz ne demek istediğimi anlarsınız. Bunun için alternatif bir çözümün gerektiği mutlak!

Çok sayıda değişkenin gerektiği durumlarda, diziler imdadımıza yetişir. (Dizi, İngilizce kaynaklarda array olarak geçer.) 100 değişken tanımlamamızın gerektiği yukardaki örneğe dönelim. Tek tek a0, …, a100 yaparak bunu nasıl yazacağınızı zaten biliyorsunuz. Şimdi tek satırda dizi tanımlayarak, bunu nasıl yapacağımızı görelim:

CREATE OR REPLACE TYPE test_array IS VARRAY(100) of number;

PL/SQL DİZİ - PL/SQL ARRAY

Varray aslında bir veri tipidir ve  bunu oluşturmak için aşağıdaki formatı kullanıyoruz.

CREATE OR REPLACE TYPE varray_ismi IS VARRAY(n) of<elementp_tipi>

NOT : PL/SQL bloğunun içinde dizileri(array) aşağıdaki gibide oluşturabiliriz.

TYPE varray_ismi IS VARRAY ( n ) OF < element_tipi >
  • varray_ismi   : varray’e vereceğimiz isimdir.
  • n                    : varray’in maksimum eleman sayısı
  • element_tipi : varray’in içindeki elemanların tipinin ne olacağı.

Örnek;

CREATE OR REPLACE TYPE namearray AS VARRAY (3) OF VARCHAR2 (10);
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
DECLARE
   type namesarray IS VARRAY(5) OF VARCHAR2(10);
   type grades IS VARRAY(5) OF INTEGER;
   names namesarray;
   marks grades;
   total integer;
BEGIN
   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
   marks:= grades(98, 97, 78, 87, 92);
   total := names.count;
   dbms_output.put_line('Total '|| total || ' Students');
   FOR i in 1 .. total LOOP
      dbms_output.put_line('Student: ' || names(i) || 'Marks: ' || marks(i));
   END LOOP;
END;
/

Yukarıdaki örnekte isimlerin tutulduğu namesarray‘i ve isimlere ait notların tutulduğu grades‘imiz var. Görüldüğü gibi oluşturduğumuz değişkenlerin tipini oluşturduğumuz varray tipinde(names ve marks) tanımlıyoruz. Ardından oluşan array’imizin elemanlarını tanımlıyoruz. Ardından da döngüler de öğrendiğimiz  for loop ile array’in eleman sayısı kadar (count ifadesi ilgili arrayin kaç elemandan oluştuğu bilgisini verir) ekrana isimleri ve notları yazdırıyoruz.

Örnek 2;

PL SQL DİZİ - PL SQL ARRAY

DECLARE
   CURSOR c_test_array is
   SELECT  name FROM test_array;
   type c_list is varray (6) of test_array.name%type;
   name_list c_list := c_list();
   counter integer :=0;
BEGIN
   FOR n IN c_test_array LOOP
      counter := counter + 1;
      name_list.extend;
      name_list(counter)  := n.name;
      dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
   END LOOP;
END;
/

Yukarıda da görüldüğü gibi tablonun name sütununu bir diziye(array) atıyor ve kullanıyoruz.

NOT : yukarıdaki 2 örnektede count ve extend metodunu kullandık bu metodların hepsini koleksiyon(collection) konusunda göreceğiz.

Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe

Kaynaklar;
http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm
https://developersdaily.wordpress.com
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
https://oracle-base.com/articles/misc/introduction-to-plsql

Loading