BULK COLLECT mengurangi pengalihan konteks antara mesin SQL dan PL / SQL dan memungkinkan mesin SQL untuk mengambil catatan sekaligus.
Oracle PL / SQL menyediakan fungsionalitas untuk mengambil record secara massal daripada mengambil satu per satu. BULK COLLECT ini dapat digunakan dalam pernyataan 'PILIH' untuk mengisi catatan secara massal atau mengambil kursor secara massal. Karena BULK COLLECT mengambil record dalam BULK, klausa INTO harus selalu berisi variabel tipe collection. Keuntungan utama menggunakan BULK COLLECT adalah meningkatkan kinerja dengan mengurangi interaksi antara database dan mesin PL / SQL.
Sintaksis:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Dalam sintaks di atas, BULK COLLECT digunakan untuk mengumpulkan data dari pernyataan 'SELECT' dan 'FETCH'.
Dalam tutorial ini Anda akan belajar-
Klausul FORALL
Klausa BATAS
BULK COLLECT Atribut
Klausul FORALL
FORALL memungkinkan untuk melakukan operasi DML pada data secara massal. Ini mirip dengan pernyataan perulangan FOR kecuali dalam perulangan FOR hal-hal terjadi pada tingkat rekaman sedangkan di FORALL tidak ada konsep LOOP. Sebaliknya, seluruh data yang ada dalam rentang tertentu diproses pada waktu yang sama.
Sintaksis:
FORALL in… ;
Dalam sintaks di atas, operasi DML yang diberikan akan dijalankan untuk seluruh data yang ada di antara rentang yang lebih rendah dan yang lebih tinggi.
Klausa BATAS
Konsep pengumpulan massal memuat seluruh data ke dalam variabel kumpulan target sebagai massal, yaitu seluruh data akan diisi ke dalam variabel kumpulan dalam sekali jalan. Tetapi hal ini tidak dianjurkan bila catatan total yang perlu dimuat sangat besar, karena ketika PL / SQL mencoba memuat seluruh data, ia menghabiskan lebih banyak memori sesi. Oleh karena itu, selalu baik untuk membatasi ukuran operasi pengumpulan massal ini.
Namun, batas ukuran ini dapat dengan mudah dicapai dengan memasukkan kondisi ROWNUM dalam pernyataan 'SELECT', sedangkan dalam kasus kursor, hal ini tidak memungkinkan.
Untuk mengatasi hal tersebut Oracle telah menyediakan klausa 'LIMIT' yang mendefinisikan jumlah record yang perlu disertakan secara massal.
Sintaksis:
FETCH BULK COLLECT INTO LIMIT ;
Pada sintaks di atas, pernyataan cursor fetch menggunakan pernyataan BULK COLLECT bersama dengan klausa LIMIT.
BULK COLLECT Atribut
Mirip dengan atribut kursor BULK COLLECT memiliki% BULK_ROWCOUNT (n) yang mengembalikan jumlah baris yang terpengaruh dalam pernyataan DML ke n dari pernyataan FORALL, yaitu akan memberikan jumlah catatan yang terpengaruh dalam pernyataan FORALL untuk setiap nilai tunggal dari koleksi variabel. Istilah 'n' menunjukkan urutan nilai dalam koleksi, yang membutuhkan jumlah baris.
Contoh 1 : Dalam contoh ini, kami akan memproyeksikan semua nama karyawan dari tabel emp menggunakan BULK COLLECT dan kami juga akan meningkatkan gaji semua karyawan sebesar 5.000 menggunakan FORALL.
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;/