Collections dan Records PL/SQL

Banyak teknik-teknik pemrograman yang menggunakan tipe-tipe collection seperti array, bag, list, set, dan tree. Untuk mendukung teknik-teknik ini di dalam aplikasi-aplikasi database, PL/SQL menyediakan tipe-tipe data TABLE dan VARRAY, yang mengijinkan kita untuk mendeklarasikan index-by tables, nested tables dan variable-size arrays. Dalam pembahasan kali ini, kita akan mempelajari bagaimana tipe-tipe tersebut mengijinkan kita untuk mereferensi dan memanipulasi kumpulan data sebagai objek-objek secara keseluruhan. Kita juga mempelajari bagaimana tipe data RECORD mengijinkan kita untuk memperlakukan data berhubungan namun tidak serupa sebagai unit logikal. Kita akan membahasnya kali ini dalam topik Collection dan Records PL/SQL.

Pembahasan kali ini mencakup topik-topik sebagai berikut:

5.1. Apa itu Collection?

Sebuah collection adalah kelompok elemen-elemen terurut, yang memiliki tipe data sama. Ia merupakan konsep umum yang mencakup list, array dan tipe-tipe data lain sudah lazim. Setiap elemen memiliki subscript unik yang menentukan posisinya dalam collection.
PL/SQL menawarkan tipe-tipe collection berikut ini:

Meskipun collections hanya dapat memiliki satu dimensi, kita dapat memodelkan arrays multi-dimensi dengan menciptakan collections yang elemen-elemennya juga merupakan collections.

Untuk menggunakan collections dalam aplikasi, kita mendefinisikan satu atau lebih type-type PL/SQL, kemudian mendefinisikan variable-variable dari type-type tersebut. Kita dapat mendefinisikan collection dari type-type dalam procedure, function, atau package. Kita dapat melewatkan collection dari variable-variable sebagai parameter-parameter, untuk memindahkan data diantara aplikasi-aplikasi client-side dan sub-sub program.

Untuk mencari data yang lebih kompeks dari nilai-nilai tunggal, kita dapat menyimpan record-record PL/SQL atau object-object type SQL dalam collections. Nested tables dan varrays dapat juga menjadi atribut dari object-object type;

5.1.1. Memahami Nested Tables

Bersama dengan database, nested tables dapat dianggap table pada database dengan hanya satu kolom. Oracle menyimpan baris-baris data dari nested table dalam urutan-urutan tidak khusus. Namun, ketika kita menampilkan nested table ke dalam PL/SQL variable, baris-baris data diberikan subscript-subscript berurutan mulai dari 1. Hal ini memberikan kepada kita sebuah akses yang mirip array terhadap baris-baris data tunggal.

PL/SQL nested tables seperti array-array satu-dimensi. Kita dapat memodelkan array-array multi-dimensi dengan menciptakan nested tables yang elemen-elemennya juga berupa nested tables.

Nested tables berbeda dengan arrays dalam dua hal penting:

  1. Arrays memiliki batas atas yang tetap, namun nested tables tidak memiliki batas atas (lihat Gambar 5-1). Sehingga, ukuran nested table dapat bertambah secara dinamis.
  2. Arrays harus padat (memiliki subsrcipt-subscript urut). Sehingga, kita tidak dapat menghapus elemen-elemen di dalamnya.. Pada awalnya, nested tables juga padat, namun mereka dapat menjadi  tipis (memiliki subsrcipt-subscript tidak urut). Sehingga, kita dapat menghapus elemen-elemen dari nested table menggunakan built-in procedure DELETE. Hal ini mungkin akan meninggalkan celah dalam index, namun built-in function NEXT mengijinkan kita untuk melakukan iterasi melalui serangkaian subscript-subscript.

Gambar 5-1 Arrays versus Nested Tables

5.1.2. Memahami Varrays

Item-item dengan tipe VARRAY disebut varrays. Mereka mengijinkan kita untuk menghubungkan identifier tunggal dengan seluruh collection. Hubungan ini mengijinkan kita untuk memanipulasi collection sebagai sebuah kesatuan dan mereferensi elemen-elemen tunggal secara mudah. Untuk mereferensi elemen, kita menggunakan sintaks standard subscripting (lihat Gambar 5-2). Sebagai contoh, Grade(3) mereferensi elemen ketiga dari varrays Grades.

Gambar 5-2 Varray berukuran 10

Varray memiliki ukuran maksimum, yang harus kita tentukan dalam definisi tipenya. Index-nya memiliki batas bawah bernilai 1 yang tetap dan batas atas yang dapat memanjang. Sebagai contoh, batas atas varray Grades adalah 7, namun kita dapat memperpanjangnya menjadi 8, 9, 10 dan seterusnya. Sehingga, varray dapat mengandung jumlah elemen yang bervariasi, dari nol (ketika masih kosong) hingga maksimum sebesar yang telah ditentukan dalam definisi tipenya.

5.1.3. Memahami Associative Arrays (Index-By Tables)

Associative arrays merupakan kumpulan key-value berpasang-pasangan, yang mana setiap key adalah unik dan digunakan untuk mencari nilai yang terkait di dalam array. Key dapat berupa integer atau string.

Memberikan nilai menggunakan key untuk pertama kali menambahkan key tersebut kepada array terkait. Pemberian-pemberian nilai selanjutnya menggunakan key yang sama akan meng-update entry yang sama. Penting untuk memiliki key yang bernilai unik, baik dengan menggunakan primary key dari SQL table, atau dengan menggabungkan string-string secara bersama-sama untuk membentuk nilai unik.
Sebagai contoh, berikut ini adalah deklarasi dari tipe associative array, dan dua arrays dengan tipe tersebut, menggunakan key-key berupa string-string:

DECLARE
  TYPE population_type IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
    country_population population_type;
    continent_population population_type;
    howmany NUMBER;
    which VARCHAR2(64)
BEGIN
  country_population('Greenland') := 100000;
  country_population('Iceland') := 750000;
  howmany := country_population('Greenland');
  continent_population('Australia') := 30000000;
  continent_population('Antarctica') := 1000; -- Creates new entry
  continent_population('Antarctica') := 1001; -- Replaces previous
  value
  which := continent_population.FIRST; -- Returns 'Antarctica'
  -- as that comes first alphabetically.
  which := continent_population.LAST; -- Returns 'Australia'
  howmany := continent_population(continent_population.LAST);
  -- Returns the value corresponding to the last key, in this
  -- case the population of Australia.
END;
/

Associative arrays membantu kit merepresentasikan kumpulan data dengan ukuran yang berubah-ubah, dengan pencarian cepat untuk elemen-elemen tunggal tanpa perlu mengetahui posisinya di dalam array dan tanpa harus mencari melalui seluruh elemen-elemen array. Hal ini seperti versi sederhana dari SQL table dimana kita dapat menampilkan nilai-nilai berdasarkan primary key. Untuk pencarian data dengan penyimpanan sementara secara sederhana, associative array mengijinkan kita untuk menghindari penggunaan space dan network operation yang dibutuhkan oleh SQL tables.
Karena associative arrays dimaksudkan untuk data sementara dibandingkan menyimpan data secara tetap, kita tidak dapat menggunakannya dengan perintah-perintah SQL seperti INSERT dan SELECT INTO. Kita dapat membuatnya persistent selama satu database session dengan mendeklarasikan tipe dalam package dan memberikan nilai-nilai dalam package body.

5.1.4. Bagaimana Globalization Settings Mempengaruhi Kunci-kunci VARCHAR2 untuk Associative Arrays

Jika pengaturan untuk national language atau globalization berubah selama session yang menggunakan associative arrays dengan nilai-nilai key VARCHAR2, program mungkin akan mengalami runtime error. Sebagai contoh, mengubah initialization paramters NLS_COMP atau NLS_SORT bersama dalam session mungkin menyebabkan method-metod seperti NEXT dan PRIOR untuk memunculkan exceptions. Jika kita perlu mengubah setting-setting ini selama session tertentu, yakinkan untuk mengaturnya kembali ke nilai-nilai asalnya sebelum melakukan operasi-operasi selanjutnya dengan bentuk-bentuk associative arrays seperti ini.

Ketika kita mendeklarasikan associative array menggunakan string sebagai key, deklarasi harus menggunakan tipe VARCHAR2, STRING, atau LONG. Kita dapat menggunakan tipe berbeda, seperti NCHAR atau NVARCHAR2, sebagai kunci untuk mereferensi associative array. Kita bahkan dapat menggunakan tipe seperti DATE, sepanjang ia dapat dikonversi ke VARCHAR2 dengan function TO_CHAR.

Namun, kita harus berhati-hati ketika menggunakan tipe-tipe lain dimana nilai-nilai yang digunakannya sebagai key adalah konsisten dan unik. Sebagai contoh, nilai string SYSDATE mungkin berubah jika initialization parameter NLS_DATE_FORMAT berubah, sehingga array_element(SYSDATE) tidak akan menghasilkan hasil yang sama seperti sebelumnya. Dua nilai NVARCHAR2 yang berbeda dapat diubah ke nilai VARCHAR2 yang sama (berisi tanda tanya kecuali karakter-karakter national tertentu). Dalam kasus ini, array_element(national_string1) dan array_element(national_string2) mungkin akan mengacu kepada elemen yang sama.

Ketika kita melewatkan associative array sebagai parameter ke remote database dengan menggunakan database link, kedua database dapat memiliki globalization settings yang berbeda. Ketika remote database melakukan operasi-operasi seperti FIRST dan NEXT, ia menggunakan urutan karakternya sendiri bahkan jika terdapat bentuk yang berbeda dari urutan dimana collection berasal. Jika perbedaan-perbedaan character set berarti bahwa dua key yang unik adalah tidak unik pada remote database, program akan mendapati exception VALUE_ERROR.

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] Silahkan melanjutkan membaca pembahasan Collections dan Records PL/SQL […]

[…] Data PL/SQL - 3,145 viewsPL/SQL Subprograms - 2,742 viewsMengontrol Akses User - 2,717 viewsCollections dan Records PL/SQL - 2,654 viewsMenampilkan Data - 2,572 viewsPendahuluan - 2,555 […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word