Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Menggunakan Klausul Kumpulkan Massal Dengan Pernyataan SELECT INTO Di Oracle Database

Klausul Kumpulkan Massal Dengan Pernyataan SELECT INTO

Selamat datang di tutorial kedua dalam seri PL/SQL Bulk Collect dimana kita akan belajar bagaimana menggunakan klausa BULK COLLECT dengan pernyataan SELECT-INTO.

Sakelar konteks bagus tetapi hanya jika jumlahnya sedikit. Peningkatan jumlah pengalih konteks dapat menyebabkan masalah seperti kinerja kueri yang buruk. Overhead yang disebabkan oleh sakelar konteks ini dapat dengan mudah dikontrol jika kita dapat mengompresnya. Inilah yang akan Anda pelajari dalam tutorial ini.

Anda dapat mempelajari lebih lanjut tentang SELECT-INTO di sini .

Kapan sebaiknya kita menggunakan Bulk Collect dengan pernyataan Select-Into?

Ketika Anda yakin bahwa hasil kembali dari pernyataan SELECT Anda adalah kecil maka Anda harus menggunakan klausa Kumpulkan Massal dengan pernyataan Select-Into. Jika tidak, klausa pengumpulan massal Anda akan membuat pernyataan Select-Into Anda menjadi monster yang memonopoli memori. Akibatnya akan memperlambat kinerja database Anda.

Apa yang harus saya lakukan jika pernyataan SELECT saya mengambil banyak baris?

Anda selalu dapat menggunakan klausa LIMIT bersama dengan Bulk Collect untuk membatasi jumlah baris yang diambil dari database. Tapi ini hanya mungkin jika kita menggunakan klausa Bulk Collect dengan PL/SQL Cursors. Meskipun demikian, kita akan membahasnya secara detail di tutorial berikutnya.

Mengapa kami tidak dapat membatasi data yang diambil menggunakan Kumpulkan Massal dalam pernyataan SELECT-INTO?

Saat kami menggunakan klausa Kumpulkan Massal dengan pernyataan SELECT-INTO, ia menggunakan implisit kursor untuk melakukan tugas pemrosesan data massal. Namun Klausa Batas hanya dapat digunakan dengan klausa Kumpulkan Massal, bila yang terakhir menggunakan Kursor Eksplisit untuk pemrosesan data.

Kapan Klausul Kumpulkan Massal menggunakan Kursor Implisit dan kapan Kursor Eksplisit?

Jika kita menggunakan Klausa Kumpulkan Massal dengan pernyataan SQL seperti SELECT-INTO, ia menggunakan kursor implisit. Di sisi lain, setiap kali kami menggunakan klausa Kumpulkan Massal dengan pernyataan FETCH, ia menggunakan kursor eksplisit.

Saya sarankan Anda membaca cara membuat kursor eksplisit untuk mempelajari lebih lanjut tentang pernyataan FETCH.

Dapatkah kita menyimpan hasil yang dikembalikan oleh klausa pengumpulan massal ke dalam variabel tipe data primitif?

Tidak, untuk saat ini Koleksi PL/SQL adalah satu-satunya tipe data yang mendukung untuk Pemrosesan Data Massal dengan Klausul Kumpulkan Massal di Oracle Database. Jika Anda mencoba menyimpan data yang diambil menggunakan klausa Bulk Collect ke dalam variabel tipe data seperti Char, Number atau Varchar2, Anda akan mendapatkan kesalahan yang akan berbunyi seperti ini:

“PLS-00497:Tidak dapat mencampur antara baris tunggal dan banyak baris (BULK) dalam daftar INTO”

Definisi Bulk Collect into Statement
Pernyataan “Bulk Collect Into” memilih beberapa data dari kolom dan menyimpannya ke dalam Koleksi SQL.

Sintaks klausa Kumpulkan Massal dengan pernyataan Select-Into.

Sintaks untuk menggunakan PL/SQL Bulk Collect Clause dengan pernyataan Select-Into di Oracle Database adalah sebagai berikut:

SELECT column_list
 BULK COLLECT INTO collection_datatype_name 
FROM table_name 
WHERE <where clause> 
ORDER BY <column list>;

Dimana:

Daftar Kolom adalah daftar kolom dari mana Anda ingin mengambil data.

Nama Tipe Data Koleksi akan menjadi nama variabel koleksi yang akan menampung data yang dikembalikan oleh klausa pengumpulan massal.

Selanjutnya selalu ingat setiap kolom yang Anda tentukan untuk mengambil data harus membawa tipe data koleksi yang sesuai untuk menyimpan data itu. Karena mesin runtime PL/SQL selalu menyimpan data yang diambil dari kolom ke dalam koleksi secara paralel.

Misalnya

SELECT column_1, column_2 BULK COLLECT INTO collection_1, collection2 FROM table;

Di sini data yang diambil dari kolom_1 akan disimpan ke dalam koleksi_1 dan data dari kolom_2 ke dalam koleksi_2 secara otomatis.

Nama Tabel bisa berupa nama tabel mana pun yang datanya ingin Anda ambil.

Diikuti oleh kami memiliki klausa WHERE dan ORDER BY yang opsional tetapi jika Anda mau, Anda dapat menggunakannya.

Sekarang setelah kita membahas sintaksnya, mari kita lakukan contoh sederhana untuk mempelajari cara bekerja dengan klausa Bulk Collect PL/SQL dengan pernyataan SELECT INTO di Oracle Database.

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_fName   IS TABLE OF VARCHAR2 (20);
    TYPE nt_lName   IS TABLE OF VARCHAR2 (20);
    
    fname   nt_fName;
    lName   nt_lName;
BEGIN
    SELECT first_name, last_name 
        BULK COLLECT INTO fName, lName 
    FROM employees; 
        
        --Print values from the collection--
    FOR idx IN 1..fName.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (idx||' - '||fName (idx) ||' '||lName (idx));
    END LOOP;
END;
/

Penjelasan Contoh

Di sini kita memiliki kode yang sangat sederhana untuk mendemonstrasikan bagaimana menggunakan Klausul Kumpulkan Massal dengan pernyataan Select-Into. Di bagian deklarasi kode ini, pertama-tama kita membuat dua kumpulan tipe Tabel Bersarang “nt_fName” &“nt_lName” dengan variabel koleksi yang sesuai “fName” &“lName”. Sebenarnya kedua koleksi ini akan digunakan untuk menyimpan data yang dikembalikan oleh pernyataan Select-Into.

Anda dapat membaca cara membuat tabel bersarang di sini.

Di bagian deklarasi kami memiliki pernyataan Select-Into kami dengan klausa Kumpulkan Massal. Selain itu dengan menggunakan pernyataan Select-Into ini kita mengambil semua data dari kolom First Name dan Last Name dari tabel karyawan. Dan dengan bantuan klausa Kumpulkan Massal, kami menyimpan data tersebut ke koleksi terkait secara paralel.

Kecuali bersama dengan pernyataan Select-Into, kami juga memiliki "For Loop" yang mencetak data dari kedua koleksi ke layar keluaran.

Harus Ditonton
Pastikan untuk melihat video di mana saya mendemonstrasikan bagaimana Klausul Kumpulkan Massal mengompresi beberapa sakelar konteks menjadi satu dan meningkatkan kinerja kueri. Ini tautannya.

Itulah tutorial menjelaskan konsep klausa Bulk Collect dengan pernyataan Select-Into secara detail. Dalam tutorial ini saya telah mencoba menjawab semua kemungkinan pertanyaan yang mungkin Anda hadapi dalam ujian Sertifikasi dan juga dalam wawancara.

Semoga Anda menikmati membaca. Pastikan untuk SHARE blog ini dengan teman-teman Anda di sosial Anda. Terima kasih &semoga harimu menyenangkan!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menambahkan server kelola di R12.2

  2. Cara terbaik untuk mempersingkat string UTF8 berdasarkan panjang byte

  3. FNDCPASS &AFPASSWD

  4. REGEXP_COUNT() Fungsi di Oracle

  5. Dapatkan BLOB dari Kolom BFILE di Oracle