PL/SQL Basic: Object Oriented Programming


PL/SQL mendukung OOP melalui penggunaan object type. Pada Java, object type hampir mirip seperti class. Mungkin lebih mirip ke class module di VB6, tetapi object type di PL/SQL mendukung inheritance dan polymorphism. Ini adalah salah satu contoh deklarasi dan definisi object type di PL/SQL:


CREATE TYPE CIF AS OBJECT (
  id_no       VARCHAR2(40),
  account_no  VARCHAR2(40),

  MEMBER PROCEDURE print_account_info
);
/

CREATE TYPE BODY CIF AS

  MEMBER PROCEDURE print_account_info IS
  BEGIN
    dbms_output.put_line('CIF ID = ' || SELF.id_no);
    dbms_output.put_line('Account No = ' || SELF.account_no);
  END;

END;
/

Pada contoh object type di atas, aku hanya membuat sebuah member procedure. Pada object type yang lebih rumit, bisa terdapat member function, static procedure, dan static function. Contoh penggunaan object type di atas dapat dilihat pada kode berikut ini:


SET SERVEROUTPUT ON;

DECLARE
  nasabah CIF;
BEGIN
  nasabah := CIF('ID-123', 'ACC-123');
  nasabah.print_account_info;
END;
/

Sekarang aku akan membuat dua buah turunan dari object CIF, yaitu IndividualCIF dan CorporateCIF. Aku akan mulai dengan membuat IndividualCIF seperti pada kode berikut:


CREATE TYPE INDIVIDUAL_CIF UNDER CIF (
  first_name VARCHAR2(200),
  last_name VARCHAR2(200),
  date_of_birth DATE,

  MEMBER FUNCTION age RETURN NUMBER
);
/

CREATE TYPE BODY INDIVIDUAL_CIF AS

  MEMBER FUNCTION age RETURN NUMBER IS
  BEGIN
    RETURN floor(
       months_between(
         current_date,self.date_of_birth)/12);
  END;

END;
/

Aku menambahkan sebuah function, yaitu age yang akan mengembalikan usia dari CIF tersebut. Contoh penggunaan object type ini misalnya:


DECLARE
  snake INDIVIDUAL_CIF;
BEGIN
  snake := INDIVIDUAL_CIF('ID-123', 'ACC-123',
      'Solid', 'Snake', DATE '1985-03-13');
  snake.print_account_info;
  dbms_output.put_line('Usia = ' || snake.age);
END;
/

Pada contoh di atas, aku masih tetap dapat menggunakan atribut dan method milik superclass CIF, plus aku dapat memakai atribut dan method tambahan yang khusus ada di INDIVIDUAL_CIF. Sekarang, aku akan membuat object turunan dari CIF lainnya, yaitu CORPORATE_CIF:


CREATE TYPE CORPORATE_CIF UNDER CIF (
  company_name VARCHAR2(200), 

  OVERRIDING MEMBER PROCEDURE print_account_info
);
/

CREATE TYPE BODY CORPORATE_CIF AS

  OVERRIDING MEMBER PROCEDURE print_account_info AS
  BEGIN
    dbms_output.put_line(
      'ID No = ' || SELF.id_no || ';' ||
      'Account No = ' || SELF.account_no || ';' ||
      'Company Name = ' || SELF.company_name);
  END;

END;
/

Kali ini aku akan men-override method print_account_info, sehingga yang dikerjakan oleh instance CORPORATE_CIF adalah method yang sudah di-override sesuai keperluan, bukan lagi method milik CIF. Berikut ini adalah contoh penggunaannya:


DECLARE
  aprdev CORPORATE_CIF;
BEGIN
  aprdev := CORPORATE_CIF('ID-124', 'ACC-124', 'APRDEV');
  aprdev.print_account_info;
END;
/

Output dari kode di atas adalah:


ID No = ID-124;Account No = ACC-124;Company Name = APRDEV

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: