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

Tujuan menggunakan berbagai jenis koleksi PL/SQL di Oracle

Mari kita mulai dengan Tabel Bersarang, ini adalah bentuk pengumpulan yang paling umum dan dengan demikian mewakili dasar perbandingan yang berguna.

Tabel bersarang adalah variabel yang dapat menampung lebih dari satu instance dari sesuatu, seringkali merupakan catatan dari tabel database. Mereka mungkin dideklarasikan seperti ini:

type emp_nt is table of emp%rowtype;
emp_rec_nt emp_nt;

Mereka berguna setiap kali kita ingin menyimpan beberapa contoh data yang kita ingin melakukan hal yang sama. Contoh klasik menggunakan BULK COLLECT untuk menyimpan banyak record:

select * 
bulk collect into emp_rec_nt
from employees;

Ini memberi kita sumber data yang bisa kita putar; yang terpenting kita dapat menavigasi mundur maupun maju, bahkan melompat ke akhir atau awal, yang merupakan hal-hal yang tidak dapat kita lakukan dengan kursor. Tabel bersarang dapat berupa kumpulan tipe data apa pun, termasuk komposit seperti catatan PL/SQL atau tipe yang ditentukan pengguna.

Tabel Index By lebih baik disebut (seperti yang dilakukan dokumen) sebagai Associative Array . Ini adalah kumpulan sederhana dari atribut tunggal dengan indeks. Tabel bersarang juga memiliki indeks tetapi indeksnya hanya jumlah baris. Dengan array asosiatif, indeks bisa bermakna, yaitu bersumber dari nilai data. Jadi mereka berguna untuk menyimpan nilai data untuk digunakan nanti. Indeks bisa berupa angka, atau (sejak 9iR2) string yang bisa sangat berguna. Misalnya, berikut adalah susunan gaji asosiatif yang diindeks oleh pengenal karyawan.

type emp_sal_aa is table of emp.sql%type
     index by emp.empno%type;
l_emp_sales emp_sal_aa;

Perhatikan bahwa saya dapat mendeklarasikan array itu menggunakan INDEX BY BINARY_INTEGER tetapi lebih jelas menggunakan sintaks %TYPE sebagai gantinya (kode dokumentasi mandiri). Elemen array tersebut dapat diidentifikasi dengan nilai indeks, dalam hal ini EMPNO:

l_emp_sals(l_emp_no) := l_emp_sal;

Selain tabel referensi caching atau nilai pencarian serupa, tidak banyak kasus penggunaan untuk array asosiatif.

Array variabel hanyalah tabel bersarang dengan batas jumlah elemen yang telah ditentukan sebelumnya. Jadi mungkin namanya menyesatkan:mereka sebenarnya adalah array tetap. Ada sedikit yang bisa kita lakukan dengan VArray yang tidak bisa kita lakukan dengan tabel bersarang (kecuali membatasi jumlah elemen dan sangat jarang kita ingin melakukannya). Mereka dinyatakan seperti ini:

type emp_va is varray(14) of emp%rowtype;
emp_rec_va emp_va;

Kami dapat menggunakan pengumpulan massal untuk mengisi VArray ...

select * 
bulk collect into emp_rec_va
from employees;

Namun kami harus yakin kueri akan mengembalikan paling banyak jumlah elemen yang ditentukan dalam deklarasi VArray. Jika tidak, SELECT akan melemparkan ORA-22165.

Tidak ada kasus penggunaan yang diketahui untuk array variabel. Oke itu agak kasar, tapi hampir sepanjang waktu Anda akan menggunakan tabel bersarang sebagai gantinya. Satu keuntungan besar VArray dibandingkan tabel bersarang adalah mereka menjamin urutan elemen. Jadi, jika Anda harus mengeluarkan elemen dalam urutan yang sama saat Anda memasukkannya, gunakan VArray.

Dokumentasi PL/SQL mencurahkan seluruh bab untuk koleksi. Cari tahu lebih lanjut.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan saat mengonversi XML dari kolom CLOB ke kolom XMLType

  2. Menginstal Klien Instan Oracle

  3. Oracle 12.2.0.1 datang pada tahun 2016

  4. ANTARA klausa versus <=DAN>=

  5. SQL tidak mengenali alias kolom di mana klausa