BULK COLLECT mengurangkan pertukaran konteks antara mesin SQL dan PL / SQL dan membolehkan mesin SQL mengambil rekod sekaligus.
Oracle PL / SQL menyediakan fungsi mengambil rekod secara pukal daripada mengambil satu persatu. BULK COLLECT ini dapat digunakan dalam pernyataan 'SELECT' untuk mengisi catatan secara pukal atau mengambil kursor secara pukal. Oleh kerana BULK COLLECT mengambil rekod dalam BULK, klausa INTO harus selalu mengandungi pemboleh ubah jenis koleksi. Kelebihan utama menggunakan BULK COLLECT adalah meningkatkan prestasi dengan mengurangkan interaksi antara pangkalan data dan mesin PL / SQL.
Sintaks:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Dalam sintaks di atas, BULK COLLECT digunakan dalam mengumpulkan data dari pernyataan 'SELECT' dan 'FETCH'.
Dalam tutorial ini anda akan belajar-
Fasal FORALL
Fasal TERHAD
Atribut BOLE COLLECT
Fasal FORALL
FORALL memungkinkan untuk melakukan operasi DML pada data secara pukal. Ia serupa dengan pernyataan gelung FOR kecuali pada gelung FOR perkara berlaku pada tahap rekod sedangkan di FORALL tidak ada konsep LOOP. Sebaliknya keseluruhan data yang terdapat dalam julat yang diberikan diproses pada masa yang sama.
Sintaks:
FORALL in… ;
Dalam sintaks di atas, operasi DML yang diberikan akan dijalankan untuk seluruh data yang ada antara julat yang lebih rendah dan lebih tinggi.
Fasal TERHAD
Konsep pengumpulan pukal memuat keseluruhan data ke dalam pemboleh ubah pengumpulan sasaran sebagai pukal iaitu keseluruhan data akan diisi ke dalam pemboleh ubah pengumpulan dalam sekali jalan. Tetapi ini tidak dianjurkan ketika total catatan yang perlu dimuat sangat besar, kerana ketika PL / SQL berusaha memuat seluruh data, ia akan memakan lebih banyak memori sesi. Oleh itu, adalah baik untuk menghadkan ukuran operasi pengumpulan pukal ini.
Walau bagaimanapun, had ukuran ini dapat dicapai dengan mudah dengan memperkenalkan keadaan ROWNUM dalam pernyataan 'SELECT', sedangkan dalam hal kursor ini tidak mungkin dilakukan.
Untuk mengatasi ini Oracle telah menyediakan klausa 'TERHAD' yang menentukan bilangan rekod yang perlu dimasukkan dalam jumlah besar.
Sintaks:
FETCH BULK COLLECT INTO LIMIT ;
Dalam sintaks di atas, pernyataan pengambilan kursor menggunakan pernyataan BULK COLLECT bersama dengan klausa TERHAD.
Atribut BOLE COLLECT
Mirip dengan atribut kursor BULK COLLECT mempunyai% BULK_ROWCOUNT (n) yang mengembalikan bilangan baris yang terjejas dalam pernyataan DML ke -9 dari pernyataan FORALL, iaitu ia akan memberikan jumlah rekod yang terpengaruh dalam pernyataan FORALL untuk setiap satu nilai dari koleksi pemboleh ubah. Istilah 'n' menunjukkan urutan nilai dalam koleksi, yang memerlukan jumlah baris.
Contoh 1 : Dalam contoh ini, kami akan memproyeksikan semua nama pekerja dari jadual emp menggunakan BULK COLLECT dan kami juga akan menaikkan gaji semua pekerja sebanyak 5000 orang 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;/