Apa Koleksi Itu?
Koleksi adalah sekelompok elemen yang diurutkan dari tipe data tertentu. Ini bisa berupa kumpulan tipe data sederhana atau tipe data kompleks (seperti yang ditentukan pengguna atau tipe rekaman).
Dalam koleksi, setiap elemen diidentifikasi dengan istilah yang disebut "subskrip." Setiap item dalam koleksi ditetapkan dengan subskrip unik. Data dalam koleksi itu dapat dimanipulasi atau diambil dengan mengacu pada subskrip unik tersebut.
Koleksi adalah hal yang paling berguna ketika data besar dari jenis yang sama perlu diproses atau dimanipulasi. Koleksi dapat diisi dan dimanipulasi secara keseluruhan menggunakan opsi 'BULK' di Oracle.
Dalam tutorial ini, Anda akan belajar-
- Apa Koleksi Itu?
- Varrays
- Tabel Bersarang
- Indeks demi tabel
- Konsep Pembuat dan Inisialisasi dalam Koleksi
- Metode Pengumpulan
Koleksi diklasifikasikan berdasarkan struktur, subskrip, dan penyimpanan seperti yang ditunjukkan di bawah ini.
- Index-by-tables (juga dikenal sebagai Associative Array)
- Tabel bersarang
- Varrays
Pada titik mana pun, data dalam koleksi dapat dirujuk dengan tiga istilah Nama Koleksi, Subskrip, Nama Bidang / Kolom sebagai "
Varrays
Varray adalah metode pengumpulan di mana ukuran array diperbaiki. Ukuran larik tidak boleh melebihi dari nilai tetapnya. Subskrip dari Varray adalah nilai numerik. Berikut adalah atribut Varrays.
- Ukuran batas atas ditetapkan
- Diisi secara berurutan dimulai dengan subskrip '1'
- Jenis koleksi ini selalu padat, yaitu kita tidak dapat menghapus elemen array apa pun. Varray dapat dihapus secara keseluruhan, atau dapat dipangkas dari akhir.
- Karena sifatnya yang selalu padat, kelenturannya sangat rendah.
- Ini lebih tepat digunakan ketika ukuran larik diketahui dan untuk melakukan aktivitas serupa pada semua elemen larik.
- Subskrip dan urutan selalu tetap stabil, yaitu subskrip dan jumlah koleksi selalu sama.
- Mereka perlu diinisialisasi sebelum digunakan dalam program. Operasi apa pun (kecuali operasi EXISTS) pada koleksi yang tidak diinisialisasi akan menimbulkan kesalahan.
- Ini dapat dibuat sebagai objek database, yang terlihat di seluruh database atau di dalam subprogram, yang hanya dapat digunakan di subprogram itu.
Gambar di bawah ini akan menjelaskan alokasi memori dari Varray (padat) secara diagram.
Subskrip | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Nilai | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Sintaks untuk VARRAY:
TYPEIS VARRAY ( ) OF ;
- Dalam sintaks di atas, type_name dideklarasikan sebagai VARRAY dari jenis 'DATA_TYPE' untuk batas ukuran yang diberikan. Tipe data dapat berupa tipe sederhana atau kompleks.
Tabel Bersarang
Tabel bersarang adalah kumpulan yang ukuran lariknya tidak tetap. Ini memiliki tipe subskrip numerik. Di bawah ini adalah deskripsi lebih lanjut tentang jenis tabel bertingkat.
- Tabel bersarang tidak memiliki batas ukuran atas.
- Karena batas ukuran atas tidak tetap, koleksi, memori perlu diperpanjang setiap kali sebelum kita menggunakannya. Kami dapat memperbanyak koleksi menggunakan kata kunci 'PERLUAS'.
- Diisi secara berurutan dimulai dengan subskrip '1'.
- Jenis koleksi ini dapat berupa dense dan sparse , yaitu kita dapat membuat koleksi sebagai dense, dan kita juga dapat menghapus elemen array individu secara acak, yang menjadikannya sparse.
- Ini memberi lebih banyak fleksibilitas terkait penghapusan elemen array.
- Ini disimpan dalam tabel database yang dihasilkan sistem dan dapat digunakan dalam kueri pemilihan untuk mengambil nilai.
- Subskrip dan urutan tidak stabil, yaitu subskrip dan jumlah elemen array dapat bervariasi.
- Mereka perlu diinisialisasi sebelum digunakan dalam program. Operasi apa pun (kecuali operasi EXISTS) pada koleksi yang tidak diinisialisasi akan menimbulkan kesalahan.
- Ini dapat dibuat sebagai objek database, yang terlihat di seluruh database atau di dalam subprogram, yang hanya dapat digunakan di subprogram itu.
Gambar di bawah ini akan menjelaskan alokasi memori Tabel Bersarang (padat dan jarang) secara diagram. Ruang elemen berwarna hitam menunjukkan elemen kosong dalam koleksi yaitu jarang.
Subskrip | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Nilai (padat) | Xyz | Dfv | Sde | Cxs | Vbc | Nhu | Qwe |
Nilai (jarang) | Qwe | Asd | Afg | Asd | Wer |
Sintaks untuk Tabel Bersarang:
TYPEIS TABLE OF ;
- Dalam sintaks di atas, type_name dideklarasikan sebagai kumpulan tabel bersarang dari jenis 'DATA_TYPE'. Tipe data dapat berupa tipe sederhana atau kompleks.
Indeks demi tabel
Indeks-menurut-tabel adalah kumpulan yang ukuran lariknya tidak tetap. Tidak seperti tipe koleksi lainnya, dalam koleksi indeks-dengan-tabel, subskrip dapat ditentukan oleh pengguna. Berikut adalah atribut indeks-demi-tabel.
- Bisa subskrip dari integer atau string. Pada saat membuat koleksi, jenis subskrip harus disebutkan.
- Koleksi ini tidak disimpan secara berurutan.
- Mereka selalu jarang.
- Ukuran array tidak tetap.
- Mereka tidak bisa disimpan di kolom database. Mereka akan dibuat dan digunakan dalam program apa pun di sesi tertentu itu.
- Mereka memberikan lebih banyak fleksibilitas dalam hal mempertahankan subskrip.
- Subskrip dapat berupa urutan subskrip negatif juga.
- Mereka lebih cocok digunakan untuk nilai kolektif yang relatif lebih kecil di mana koleksi dapat diinisialisasi dan digunakan dalam subprogram yang sama.
- Mereka tidak perlu diinisialisasi sebelum mulai menggunakannya.
- Itu tidak dapat dibuat sebagai objek database. Itu hanya bisa dibuat di dalam subprogram, yang hanya bisa digunakan di subprogram itu.
- BULK COLLECT tidak dapat digunakan dalam tipe koleksi ini karena subskrip harus diberikan secara eksplisit untuk setiap rekaman dalam koleksi.
Gambar di bawah ini akan menjelaskan alokasi memori Tabel Bersarang (jarang) secara diagram. Ruang elemen berwarna hitam menunjukkan elemen kosong dalam koleksi yaitu jarang.
Subskrip (varchar) | PERTAMA | KEDUA | KETIGA | KEEMPAT | KELIMA | KEENAM | KETUJUH |
Nilai (jarang) | Qwe | Asd | Afg | Asd | Wer |
Sintaks untuk Indeks-per-Tabel
TYPEIS TABLE OF INDEX BY VARCHAR2 (10);
- Dalam sintaks di atas, type_name dideklarasikan sebagai kumpulan indeks-dengan-tabel dari tipe 'DATA_TYPE'. Tipe data dapat berupa tipe sederhana atau kompleks. Variabel subskrip / indeks diberikan sebagai tipe VARCHAR2 dengan ukuran maksimum 10.
Konsep Pembuat dan Inisialisasi dalam Koleksi
Konstruktor adalah fungsi bawaan yang disediakan oleh oracle yang memiliki nama yang sama dengan objek atau koleksi. Mereka dieksekusi pertama kali setiap kali objek atau koleksi dirujuk untuk pertama kalinya dalam sebuah sesi. Di bawah ini adalah detail penting dari konstruktor dalam konteks koleksi:
- Untuk koleksi, konstruktor ini harus dipanggil secara eksplisit untuk menginisialisasinya.
- Baik tabel Varray dan Nested perlu diinisialisasi melalui konstruktor ini sebelum dirujuk ke program.
- Konstruktor secara implisit memperluas alokasi memori untuk koleksi (kecuali Varray), maka konstruktor juga dapat menetapkan variabel ke koleksi.
- Menetapkan nilai ke koleksi melalui konstruktor tidak akan pernah membuat koleksi menjadi jarang.
Metode Pengumpulan
Oracle menyediakan banyak fungsi untuk memanipulasi dan bekerja dengan koleksi. Fungsi-fungsi ini sangat berguna dalam program untuk menentukan dan memodifikasi atribut koleksi yang berbeda. Tabel berikut akan memberikan fungsi yang berbeda dan deskripsinya.
metode | Deskripsi | SINTAKSIS |
ADA (n) | Metode ini akan mengembalikan hasil Boolean. Ini akan mengembalikan 'TRUE' jika elemen ke n ada dalam koleksi itu, jika tidak maka akan mengembalikan FALSE. Hanya fungsi EXISTS yang dapat digunakan dalam koleksi yang tidak diinisialisasi | |
MENGHITUNG | Memberikan jumlah total elemen yang ada dalam koleksi | |
MEMBATASI | Ini mengembalikan ukuran maksimum koleksi. Untuk Varray, ini akan mengembalikan ukuran tetap yang telah ditentukan. Untuk tabel bersarang dan Indeks-dengan-tabel, ini memberikan NULL | |
PERTAMA | Mengembalikan nilai variabel indeks pertama (subskrip) dari koleksi | |
TERAKHIR | Mengembalikan nilai variabel indeks terakhir (subskrip) dari koleksi | |
SEBELUMNYA (n) | Pengembalian mendahului variabel indeks dalam kumpulan elemen ke- n . Jika tidak ada nilai indeks sebelumnya, NULL dikembalikan | |
BERIKUTNYA (n) | Pengembalian berhasil variabel indeks dalam kumpulan elemen ke- n . Jika tidak ada nilai indeks yang berhasil, NULL dikembalikan | |
MEMPERPANJANG | Memperluas satu elemen dalam koleksi di bagian akhir | |
PERPANJANG (n) | Memperluas n elemen di akhir koleksi | |
PERPANJANG (n, i) | Memperluas n salinan elemen ke- i di akhir koleksi | |
MEMANGKAS | Menghapus satu elemen dari akhir koleksi | |
PANGKAS (n) | Menghapus n elemen dari akhir koleksi | |
MENGHAPUS | Menghapus semua elemen dari koleksi. Mengosongkan koleksi | |
HAPUS (n) | Menghapus elemen ke-n dari koleksi. Jika elemen ke- n adalah NULL, maka ini tidak akan melakukan apa-apa | |
HAPUS (m, n) | Menghapus elemen dalam kisaran m th ke n th dalam koleksi |
Contoh 1: Jenis Rekaman di tingkat Subprogram
Dalam contoh ini, kita akan melihat cara mengisi koleksi menggunakan 'BULK COLLECT' dan cara merujuk data koleksi.
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;/
Penjelasan Kode:
- Baris kode 2-8 : Jenis record 'emp_det' dideklarasikan dengan kolom emp_no, emp_name, gaji dan manajer tipe data NOMOR, VARCHAR2, NOMOR, NOMOR.
- Baris kode 9: Membuat koleksi 'emp_det_tbl' dari elemen tipe record 'emp_det'
- Baris kode 10: Mendeklarasikan variabel 'guru99_emp_rec' sebagai jenis 'emp_det_tbl' dan diinisialisasi dengan konstruktor null.
- Baris kode 12-15: Memasukkan data sampel ke dalam tabel 'emp'.
- Baris kode 16: Melakukan transaksi sisipan.
- Baris kode 17: Mengambil record dari tabel 'emp' dan mengisi variabel collection secara massal menggunakan perintah "BULK COLLECT". Sekarang variabel 'guru99_emp_rec' berisi semua record yang ada di tabel 'emp'.
- Baris kode 19-26: Setting loop 'FOR' digunakan untuk mencetak semua record dalam koleksi satu-per-satu. Metode pengumpulan FIRST dan LAST digunakan sebagai batas loop yang lebih rendah dan lebih tinggi.
Output : Seperti yang Anda lihat pada gambar di atas ketika kode di atas dijalankan, Anda akan mendapatkan output berikut
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----------------------------------------------