Oracle PL / SQL BULK COLLECT: FORALL Örneği

İçindekiler:

Anonim

TOPLU TOPLAMA nedir?

BULK COLLECT, SQL ve PL / SQL motoru arasındaki bağlam anahtarlarını azaltır ve SQL motorunun kayıtları bir kerede almasına izin verir.

Oracle PL / SQL, kayıtları tek tek getirmek yerine toplu olarak getirme işlevselliğini sağlar. Bu BULK COLLECT, kayıtları toplu olarak doldurmak veya imleci toplu olarak getirmek için 'SELECT' ifadesinde kullanılabilir. BULK COLLECT, kaydı BULK olarak getirdiği için, INTO yan tümcesi her zaman bir koleksiyon türü değişkeni içermelidir. BULK COLLECT kullanmanın temel avantajı, veritabanı ile PL / SQL motoru arasındaki etkileşimi azaltarak performansı artırmasıdır.

Sözdizimi:

SELECT  BULK COLLECT INTO bulk_varaible FROM 
;FETCH  BULK COLLECT INTO ;

Yukarıdaki sözdiziminde, BULK COLLECT, 'SELECT' ve 'FETCH' ifadesinden veri toplamak için kullanılır.

Bu eğitimde öğreneceksiniz-

  • FORALL Madde
  • LIMIT Maddesi
  • TOPLU TOPLAMA Öznitelikleri

FORALL Madde

FORALL, veriler üzerinde toplu olarak DML işlemlerinin gerçekleştirilmesine izin verir. FOR döngüsünde işler kayıt düzeyinde olurken, FORALL'da LOOP kavramı yoktur. Bunun yerine, verilen aralıkta bulunan verilerin tamamı aynı anda işlenir.

Sözdizimi:

FORALL in;

Yukarıdaki sözdiziminde, verilen DML işlemi, alt ve üst aralık arasında bulunan tüm veriler için yürütülecektir.

LIMIT Maddesi

Toplu toplama kavramı, tüm verileri toplu olarak hedef toplama değişkenine yükler, yani tüm veriler tek seferde toplama değişkenine doldurulur. Ancak yüklenmesi gereken toplam kayıt çok büyük olduğunda bu tavsiye edilmez, çünkü PL / SQL tüm veriyi yüklemeye çalıştığında daha fazla oturum belleği tüketir. Bu nedenle, bu toplu toplama işleminin boyutunu sınırlamak her zaman iyidir.

Bununla birlikte, bu boyut sınırına 'SELECT' ifadesine ROWNUM koşulunun eklenmesi ile kolayca ulaşılabilir, oysa imleç durumunda bu mümkün değildir.

Oracle, bu sorunun üstesinden gelmek için toplu olarak eklenmesi gereken kayıtların sayısını tanımlayan 'LIMIT' maddesini sağlamıştır.

Sözdizimi:

FETCH  BULK COLLECT INTO  LIMIT ;

Yukarıdaki sözdiziminde, imleç getirme deyimi, LIMIT yan tümcesi ile birlikte BULK COLLECT deyimini kullanır.

TOPLU TOPLAMA Öznitelikleri

İmleç özelliklerine benzer şekilde BULK COLLECT, FORALL ifadesinin n inci DML ifadesinde etkilenen satır sayısını döndüren% BULK_ROWCOUNT (n) değerine sahiptir , yani, koleksiyondaki her bir değer için FORALL ifadesinde etkilenen kayıtların sayısını verecektir. değişken. 'N' terimi, satır sayısının gerekli olduğu koleksiyondaki değer sırasını belirtir.

Örnek 1 : Bu örnekte, BULK COLLECT kullanarak emp tablosundaki tüm çalışan adını projelendireceğiz ve ayrıca FORALL kullanarak tüm çalışanların maaşını 5000 artıracağız.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/

Çıktı

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYSalary Updated

Kod Açıklaması:

  • Kod satırı 2 : 'SELECT emp_name FROM emp' ifadesi için imleç guru99_det'in bildirilmesi.
  • Kod satırı 3 : lv_emp_name_tbl'nin VARCHAR2 (50) tablo türü olarak bildirilmesi
  • Kod satırı 4 : lv_emp_name lv_emp_name_tbl türü olarak bildiriliyor.
  • Kod satırı 6: İmleci açma.
  • Kod satırı 7: 5000 intl lv_emp_name değişkeni olarak LIMIT boyutunda BULK COLLECT kullanılarak imleç getiriliyor.
  • Kod satırı 8-11: lv_emp_name koleksiyonundaki tüm kayıtları yazdırmak için FOR döngüsünü ayarlama.
  • Kod satırı 12: FORALL'u kullanarak tüm çalışanın maaşını 5000 kişi güncelliyor.
  • Kod satırı 14: İşlemin gerçekleştirilmesi.