Oracle PL / SQL Koleksiyonları: Varrays, Nested & Tablolara Göre Dizin

İçindekiler:

Anonim

Koleksiyon nedir?

Bir Koleksiyon, belirli veri türlerinin sıralı bir öğe grubudur. Basit veri türü veya karmaşık veri türü (kullanıcı tanımlı veya kayıt türleri gibi) koleksiyonu olabilir.

Koleksiyonda, her öğe "alt simge" adı verilen bir terimle tanımlanır . Koleksiyondaki her öğeye benzersiz bir alt simge atanır. Bu koleksiyondaki veriler, bu benzersiz alt simgeye atıfta bulunularak değiştirilebilir veya getirilebilir.

Koleksiyonlar, aynı türden büyük bir verinin işlenmesi veya manipüle edilmesi gerektiğinde en yararlı şeylerdir. Koleksiyonlar, Oracle'daki 'TOPLU' seçeneği kullanılarak bir bütün olarak doldurulabilir ve değiştirilebilir.

Bu eğitimde öğreneceksiniz-

  • Koleksiyon nedir?
  • Varyasyonlar
  • İç içe Tablolar
  • Tabloya göre indeks
  • Koleksiyonlarda Oluşturucu ve İlklendirme Kavramı
  • Toplama Yöntemleri

Koleksiyonlar, aşağıda gösterildiği gibi yapı, alt simge ve depolamaya göre sınıflandırılır.

  • Dizine göre tablo (İlişkili Dizi olarak da bilinir)
  • İç içe tablolar
  • Varyasyonlar

Herhangi bir noktada, koleksiyondaki verilere üç terim Koleksiyon adı, Alt Simge, Alan / Sütun adı " (). " olarak atıfta bulunulabilir. Aşağıdaki bölümde yukarıda belirtilen bu koleksiyon kategorileri hakkında daha fazla bilgi edineceksiniz.

Varyasyonlar

Varray, dizinin boyutunun sabit olduğu bir toplama yöntemidir. Dizi boyutu, sabit değerinden fazla olamaz. Varray'in alt simgesi sayısal bir değerdir. Aşağıda, Varrays'in nitelikleri verilmiştir.

  • Üst limit boyutu sabittir
  • '1' alt simgesiyle başlayarak sırayla doldurulur
  • Bu koleksiyon türü her zaman yoğundur, yani herhangi bir dizi elemanını silemeyiz. Varray bir bütün olarak silinebilir veya sondan kesilebilir.
  • Doğası gereği her zaman yoğun olduğu için esnekliği çok azdır.
  • Dizi boyutu bilindiğinde kullanılması ve tüm dizi elemanlarında benzer faaliyetlerin gerçekleştirilmesi daha uygundur.
  • Alt simge ve sıra her zaman sabit kalır, yani koleksiyonun alt simge ve sayısı her zaman aynıdır.
  • Programlarda kullanmadan önce ilklendirilmeleri gerekir. Başlatılmamış bir koleksiyondaki herhangi bir işlem (EXISTS işlemi dışında) bir hata oluşturacaktır.
  • Yalnızca o alt programda kullanılabilen, veritabanı genelinde veya alt programın içinde görülebilen bir veritabanı nesnesi olarak oluşturulabilir.

Aşağıdaki şekil, Varray'in (yoğun) bellek tahsisini şematik olarak açıklayacaktır.

Alt simge 1 2 3 4 5 6 7
Değer Xyz Dfv Sde Cx'ler Vbc Nhu Qwe

VARRAY için sözdizimi:

TYPE  IS VARRAY () OF ;
  • Yukarıdaki sözdiziminde, tür_adı, verilen boyut sınırı için 'DATA_TYPE' türünde VARRAY olarak bildirilir. Veri türü basit veya karmaşık tür olabilir.

İç içe Tablolar

İç içe geçmiş bir tablo, dizinin boyutunun sabit olmadığı bir koleksiyondur. Sayısal alt simge tipine sahiptir. Aşağıda, iç içe geçmiş tablo türü hakkında daha fazla açıklama bulunmaktadır.

  • Yuvalanmış tablonun üst boyut sınırı yoktur.
  • Üst boyut sınırı sabit olmadığından, koleksiyonun, belleğin her kullanıştan önce genişletilmesi gerekir. Koleksiyonu 'EXTEND' anahtar kelimesini kullanarak genişletebiliriz.
  • '1' alt simgesiyle başlayarak sırayla doldurulur.
  • Bu koleksiyon türü hem yoğun hem de seyrek olabilir , yani koleksiyonu yoğun olarak oluşturabiliriz ve ayrıca tekil dizi elemanını rastgele silebiliriz, bu da onu seyrek yapar.
  • Dizi elemanını silme konusunda daha fazla esneklik sağlar.
  • Sistem tarafından oluşturulan veritabanı tablosunda saklanır ve değerleri almak için seçme sorgusunda kullanılabilir.
  • Alt simge ve sıra sabit değildir, yani dizi elemanının alt simge ve sayısı değişebilir.
  • Programlarda kullanmadan önce ilklendirilmeleri gerekir. Başlatılmamış koleksiyondaki herhangi bir işlem (EXISTS işlemi dışında) bir hata oluşturacaktır.
  • Yalnızca o alt programda kullanılabilen, veritabanı genelinde veya alt programın içinde görülebilen bir veritabanı nesnesi olarak oluşturulabilir.

Aşağıdaki şekil, İç İçe Tablonun (yoğun ve seyrek) bellek tahsisini şematik olarak açıklayacaktır. Siyah renkli eleman boşluğu, bir koleksiyondaki boş elemanı, yani seyrek olduğunu gösterir.

Alt simge 1 2 3 4 5 6 7
Değer (yoğun) Xyz Dfv Sde Cx'ler Vbc Nhu Qwe
Değer (seyrek) Qwe Asd Afg Asd Biz

İç İçe Tablo için Sözdizimi:

TYPE  IS TABLE OF ;
  • Yukarıdaki sözdiziminde, tür_adı, 'DATA_TYPE' türünün İç içe geçmiş tablo koleksiyonu olarak bildirilir. Veri türü basit veya karmaşık tür olabilir.

Tabloya göre indeks

Tabloya göre dizin, dizi boyutunun sabit olmadığı bir koleksiyondur. Diğer koleksiyon türlerinden farklı olarak, tabloya göre dizin koleksiyonunda alt simge kullanıcı tarafından tanımlanabilir. Tabloya göre indeks özelliklerinin özellikleri aşağıdadır.

  • Alt simge tam sayı veya dizelerden oluşabilir. Koleksiyon oluşturulurken alt simge türü belirtilmelidir.
  • Bu koleksiyonlar sıralı olarak depolanmaz.
  • Doğada her zaman seyrektirler.
  • Dizi boyutu sabit değildir.
  • Veritabanı sütununda saklanamazlar. Söz konusu oturumdaki herhangi bir programda oluşturulacak ve kullanılacaktır.
  • Alt simgeyi koruma açısından daha fazla esneklik sağlarlar.
  • Alt simgeler, negatif alt simge dizisi de olabilir.
  • Koleksiyonun aynı alt programlarda başlatılabileceği ve kullanılabileceği nispeten daha küçük kolektif değerler için kullanımları daha uygundur.
  • Kullanmaya başlamadan önce ilklendirilmelerine gerek yoktur.
  • Veritabanı nesnesi olarak oluşturulamaz. Yalnızca o alt programda kullanılabilen alt program içinde oluşturulabilir.
  • Koleksiyondaki her kayıt için alt simge açıkça verilmesi gerektiğinden BULK COLLECT bu koleksiyon türünde kullanılamaz.

Aşağıdaki şekil, İç İçe Tablonun (seyrek) bellek tahsisini şematik olarak açıklayacaktır. Siyah renkli eleman boşluğu, bir koleksiyondaki boş elemanı, yani seyrek olduğunu gösterir.

Alt simge (varchar) İLK İKİNCİ ÜÇÜNCÜ DÖRDÜNCÜ BEŞİNCİ ALTINCI YEDİNCİ
Değer (seyrek) Qwe Asd Afg Asd Biz

Dizine Göre Dizin Sözdizimi

TYPE  IS TABLE OF  INDEX BY VARCHAR2 (10);
  • Yukarıdaki sözdiziminde, tür_adı, 'DATA_TYPE' türünün tabloya göre dizin koleksiyonu olarak bildirilir. Veri türü basit veya karmaşık tür olabilir. Subsciprt / index değişkeni, maksimum boyutu 10 olmak üzere VARCHAR2 tipi olarak verilmiştir.

Koleksiyonlarda Oluşturucu ve İlklendirme Kavramı

Oluşturucular, nesne veya koleksiyonlarla aynı adı taşıyan oracle tarafından sağlanan yerleşik işlevdir. Bir oturumda nesne veya koleksiyonlar ilk kez yönlendirildiğinde ilk olarak çalıştırılırlar. Oluşturucunun koleksiyon bağlamındaki önemli ayrıntıları aşağıdadır:

  • Koleksiyonlar için bu kurucular, onu başlatmak için açıkça çağrılmalıdır.
  • Hem Varray hem de İç içe tabloların programa başvurulmadan önce bu yapıcılar aracılığıyla başlatılması gerekir.
  • Yapıcı, bir koleksiyon için bellek tahsisini örtük olarak genişletir (Varray dışında), dolayısıyla yapıcı, değişkenleri koleksiyonlara atayabilir.
  • Yapıcılar aracılığıyla koleksiyona değer atamak, koleksiyonu asla seyrek yapmaz.

Toplama Yöntemleri

Oracle, koleksiyonları manipüle etmek ve onlarla çalışmak için birçok işlev sağlar. Bu işlevler, programda koleksiyonların farklı özelliklerini belirlemek ve değiştirmek için çok kullanışlıdır. Aşağıdaki tablo farklı işlevleri ve açıklamalarını verecektir.

Yöntem Açıklama SÖZDİZİMİ
VAR (n) Bu yöntem Boole sonuçlarını döndürecektir. Bu koleksiyonda n'inci eleman varsa 'TRUE' , aksi takdirde FALSE döndürür. İlklendirilmemiş koleksiyonda yalnızca EXISTS işlevleri kullanılabilir .EXISTS (öğe_konumu)
MİKTAR Bir koleksiyonda bulunan öğelerin toplam sayısını verir .COUNT
SINIR Koleksiyonun maksimum boyutunu döndürür. Varray için, tanımlanan sabit boyutu döndürür. İç içe geçmiş tablo ve tabloya göre dizin için NULL verir .LIMIT
İLK Koleksiyonların ilk dizin değişkeninin (alt simge) değerini verir .FIRST
SON Koleksiyonların son dizin değişkeninin (alt simge) değerini verir .SON
ÖNCEKİ (n) N inci öğesinin bir koleksiyonundaki dizin değişkeninden önce döner . Önceleri yoksa indeks değeri NULL döndürülür .PRIOR (n)
SONRAKİ (n) N'inci öğenin bir koleksiyonundaki dizin değişkenini döndürür . Başarılı bir indeks değeri yoksa NULL döndürülür . SONRAKİ (n)
GENİŞLET Sonunda bir koleksiyondaki bir öğeyi genişletir .EXTEND
GENİŞLET (n) Bir koleksiyonun sonundaki n öğeyi genişletir .EXTEND (n)
EXTEND (n, i) Koleksiyonun sonunda i'inci öğenin n kopyasını uzatır .EXTEND (n, i)
TRIM Koleksiyonun sonundan bir öğeyi kaldırır .TRIM
TRIM (n) Koleksiyonun sonundan n öğeyi kaldırır .TRIM (n)
SİL Koleksiyondaki tüm öğeleri siler. Koleksiyonu boş yapar .DELETE
SİL (n) Koleksiyondan n'inci öğeyi siler. Eğer n'inci eleman NULL ise, bu hiçbir şey yapmaz .DELETE (n)
SİL (m, n) Aralık m elemanı siler th n inci koleksiyonunda .DELETE (m, n)

Örnek 1: Alt program düzeyinde Kayıt Türü

Bu örnekte, 'BULK COLLECT' kullanarak koleksiyonu nasıl dolduracağımızı ve koleksiyon verilerini nasıl yönlendireceğimizi göreceğiz.

DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);TYPE emp_det_tbl IS TABLE OF emp_det; guru99_emp_rec emp_det_tbl:= emp_det_tbl();BEGININSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1000,’AAA’,25000,1000);INSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1001,'XXX’,10000,1000);INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);INSERT INTO emp (emp_no,emp_name,salary, manager) VALUES (1003,’ZZZ’,'7500,1000);COMMIT:SELECT emp no,emp_name,manager,salary BULK COLLECT INTO guru99_emp_recFROM emp;dbms_output.put_line (‘Employee Detail');FOR i IN guru99_emp_rec.FIRST… guru99_emp_rec.LASTLOOPdbms_output.put_line (‘Employee Number: '||guru99_emp_rec(i).emp_no);dbms_output.put_line (‘Employee Name: '||guru99_emp_rec(i).emp_name);dbms_output.put_line (‘Employee Salary:'|| guru99_emp_rec(i).salary);dbms_output.put_line(‘Employee Manager Number:'||guru99_emp_rec(i).manager);dbms_output.put_line('--------------------------------');END LOOP;END;/

Kod Açıklaması:

  • Kod satırı 2-8 : 'emp_det' kayıt türü emp_no, emp_name, maaş ve NUMBER, VARCHAR2, NUMBER, NUMBER veri türünün yöneticisi sütunlarıyla bildirilir.
  • Kod satırı 9: 'emp_det' kayıt türü öğesinin 'emp_det_tbl' koleksiyonunu oluşturma
  • Kod satırı 10: 'guru99_emp_rec' değişkeninin 'emp_det_tbl' türü olarak bildirilmesi ve boş yapıcı ile başlatılması.
  • Kod satırı 12-15: Örnek verileri 'emp' tablosuna ekleme.
  • Kod satırı 16: Ekleme işleminin gerçekleştirilmesi.
  • Kod satırı 17: 'emp' tablosundan kayıtları getirme ve koleksiyon değişkenini "BULK COLLECT" komutunu kullanarak toplu olarak doldurma. Şimdi 'guru99_emp_rec' değişkeni, 'emp' tablosunda bulunan tüm kayıtları içerir.
  • Kod satırı 19-26: Koleksiyondaki tüm kayıtları tek tek yazdırmak için 'FOR' döngüsünü ayarlama. İLK ve SON toplama yöntemi, döngünün alt ve üst sınırı olarak kullanılır.

Çıktı : Yukarıdaki ekran görüntüsünde görebileceğiniz gibi, yukarıdaki kod çalıştırıldığında aşağıdaki çıktıyı alacaksınız

Employee DetailEmployee Number: 1000Employee Name: AAAEmployee Salary: 25000Employee Manager Number: 1000----------------------------------------------Employee Number: 1001Employee Name: XXXEmployee Salary: 10000Employee Manager Number: 1000----------------------------------------------Employee Number: 1002Employee Name: YYYEmployee Salary: 15000Employee Manager Number: 1000----------------------------------------------Employee Number: 1003Employee Name: ZZZEmployee Salary: 7500Employee Manager Number: 1000----------------------------------------------