PL/SQL Basic: Struktur Data


Semua bahasa pemograman memiliki cara untuk merepresentasikan struktur data. Di bahasa pemograman Java, misalnya, kita bisa memakai struktur data Set, Map dan List dengan mudah. Lalu bagaimana dengan PL/SQL? Dalam bahasa pemograman PL/SQL, kita menggunakan collection untuk merepresentasikan struktur data. Terdapat 3 jenis collection, yaitu associative array, nested table, dan varray.

Associative array mirip seperti HashMap di Java. Kita bisa meng-akses elemen di associative array berdasarkan index berupa angka maupun string. Nama lain untuk associative array adalah index-by tables. Berikut ini adalah contoh deklarasi dan penggunannya:

DECLARE

  TYPE DAFTAR_NILAI IS TABLE OF
     NUMBER INDEX BY VARCHAR2(50);
  kelas_pagi_a DAFTAR_NILAI;

BEGIN

  kelas_pagi_a('SOLID SNAKE'):=100;
  kelas_pagi_a('LIQUID SNAKE'):=90;
  kelas_pagi_a('BIG BOSS'):=80;

  dbms_output.put_line('Nilai untuk SOLID SNAKE = ' ||
     kelas_pagi_a('SOLID SNAKE'));
  dbms_output.put_line('Nilai untuk LIQUID SNAKE = ' ||
     kelas_pagi_a('LIQUID SNAKE'));
  dbms_output.put_line('Nilai untuk BIG BOSS = ' ||
     kelas_pagi_a('BIG BOSS'));

END;

Associative array hampir sama seperti sebuah tabel dengan dua kolom, dimana kolom pertama adalah primary key dan kolom kedua adalah sebuah nilai, hanya saja associative array bersifat temporary dan tidak untuk disimpan dalam database.

Nested table hampir sama seperti associative array, tetapi ia dapat disimpan di dalam sebuah tabel. Dalam bahasa pemograman Java, struktur data Set dan Bag memiliki sifat yang hampir sama dengan nested table karena kita mengakses nilai di nested table tanpa mempedulikan urutan, index atau key. Berikut ini adalah contoh deklarasi dan pemanggilan nested table:

DECLARE
  TYPE BAHASA IS TABLE OF NVARCHAR2(100);
  bahasa_pemograman BAHASA;
BEGIN
  bahasa_pemograman:=BAHASA('JAVA', 'PL/SQL', 'PERL');
  FOR i IN bahasa_pemograman.FIRST .. bahasa_pemograman.LAST LOOP
     dbms_output.put_line(bahasa_pemograman(i));
  END LOOP;
END;

Seperti yang sudah ditulis di atas, perbedaan nested table dan associative array selain nested table harus dibaca secara berurutan, adalah nested table dapat disimpan ke dalam tabel. Berikut ini adalah contohnya:

CREATE TYPE HIMPUNAN IS TABLE OF NVARCHAR2(100);

CREATE TABLE TBL_LATIHAN (
  ID CHAR(40) ,
  NAME NVARCHAR2(50),
  NILAI_HIMPUNAN HIMPUNAN
) NESTED TABLE NILAI_HIMPUNAN STORE AS TBL_NILAI_HIMPUNAN;

INSERT INTO TBL_LATIHAN VALUES ('TEST-1', 'TEST-1',
   HIMPUNAN('PILIHAN1', 'PILIHAN2', 'PILIHAN3'));

Setelah menjalankan SQL diatas, jika kita melihat tampilan table di SQL Developer, akan terlihat dua buah tabel baru, yaitu TBL_LATIHAN dan TBL_NILAI_HIMPUNAN. Kita tidak dapat men-double click untuk melihat nilai TBL_NILAI_HIMPUNAN secara langsung, karena SQL Developer akan memunculkan pesan kesalahan dan meminta kita untuk membuka parent table-nya, yaitu TBL_LATIHAN. Begitu kita menghapus (drop table) TBL_LATIHAN, secara otomatis TBL_NILAI_HIMPUNAN juga akan dihapus.

Berikutnya, masih ada satu lagi jenis collection di PL/SQL, yaitu varray. Ia hampir tidak beda jauh dengan tipe data array di berbagai bahasa pemograman lain. Saat kita mendeklarasikannya, kita harus menentukan jumlah elemen maksimal. Kita juga memakainya sama seperti array pada umumnya, yaitu berdasarkan index yang berurutan. Berbeda dengan nested table, kita tidak dapat menghapus atau menyisipkan elemen sesuka hati kita. Berikut ini adalah contoh deklarasi dan inisialisasi varray:

DECLARE

  TYPE ARRAY_NAMA_SISWA IS VARRAY(10)
     OF NVARCHAR2(50);
  daftar_siswa ARRAY_NAMA_SISWA;

BEGIN

  daftar_siswa := ARRAY_NAMA_SISWA('Solid Snake', 'Liquid Snake',
    'Big Boss');

  FOR i IN 1..3 LOOP
    dbms_output.put_line('Nama Siswa = ' || daftar_siswa(i));
  END LOOP;
END;

Sama seperti nested table, varray juga dapat disimpan ke dalam tabel, seperti pada contoh berikut:

CREATE TYPE ARRAY_NAMA IS VARRAY(10) OF NVARCHAR2(50);

CREATE TABLE TBL_LATIHAN (
   ID CHAR(40),
   NAME NVARCHAR2(50),
   BLACKLIST_NAME ARRAY_NAMA );

INSERT INTO TBL_LATIHAN VALUES ('TEST-1', 'TEST-1',
   ARRAY_NAMA('Liquid Snake', 'The Boss'));

Bedanya dengan nested table, varray tidak menciptakan sebuah tabel baru. Ia akan disimpan bersama dengan table jika ukurannya dibawah 4KB. Operasi UPDATE atau SELECT akan berpengaruh pada seluruh elemen varray, sehingga akan mengurangi performance jika varray berisi banyak elemen.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: