PL/SQL Subprograms

8.8.1. Menggunakan Notasi Posisi

Pemanggilan procedure pertama menggunakan notasi posisi. PL/SQL compiler menghubungkan parameter aktual pertama, acct, dengan parameter formal pertama, acct_no. Dan, compiler tersebut menghubungan parameter aktual kedua, amt, dengan parameter formal pertama, amount.

8.8.2. Menggunakan Notasi Nama

Pemanggilan procedure kedua menggunakan notasi nama. Sebuah tanda panah (=>) bertindak sebagai operator penghubung, yang menghubungkan parameter formal pada sisi kiri tanda panah, dengan parameter aktual pada sisi kanan tanda panah.

Pemanggilan procedure ketiga juga menggunakan notasi nama dan menunjukkan bahwa kita dapat mendaftar pasangan-pasangan parameter dengan berbagai urutan. Jadi, kita tidak perlu tahu urutan bagaimana parameter formal ditampilkan.

8.8.3. Menggunakan Notasi Gabungan

Pemanggilan procedure keempat menunjukkan bahwa kita dapat menggabungkan notasi posisi dan nama. Dalam kasus ini, parameter pertama menggunakan notasi posisi, dan parameter kedua menggunakan notasi nama. Notasi posisi harus mendahului notasi nama. Kebalikan tidak diperbolehkan. Sebagai contoh, pemanggilan procedure berikut ini tidak adalah ilegal:

credit_acct(acct_no => acct, amt); -- illegal

8.9. Menentukan Mode Parameter Subprogram

Kita menggunakan mode-mode parameter untuk mendefinisikan tingkah laku dari parameter formal. Tiga mode parameter, IN (default), OUT, dan IN OUT, dapat digunakan bersama sembarang subprogram. Namun, hindari menggunakan mode-mode OUT dan IN OUT dengan functions. Maksud dari sebuah function adalah untuk mendapatkan nol atau lebih argumen-argumen (parameter-parameter aktual) dan menghasilkan sebuah nilai tunggal. Memiliki sebuah function yang menghasilkan banyak lebih dari satu nilai merupakan praktek pemrograman yang buruk. Juga , functions sebaiknya bebas dari side effects, yang mengubah nilai-nilai dari variables yang tidak lokal terhadap subprogram.

8.9.1. Menggunakan Mode IN

Sebuah parameter IN mengijinkan kita untuk melewatkan nilai-nilai ke subprogram yang sedang dipanggil. Di bagian dalam subprogram tersebut, sebuah parameter IN bertindak seperti halnya sebuah konstanta. Sehingga, tidak dapat diberikan nilai terhadapnya. Sebagai contoh, perintah pemberian nilai berikut ini menyebabkan sebuah compilation error:

PROCEDURE debit_account (acct_id IN INTEGER, amount IN REAL) IS
  minimum_purchase CONSTANT REAL DEFAULT 10.0;
  service_charge CONSTANT REAL DEFAULT 0.50;
BEGIN
  IF amount < minimum_purchase THEN
    amount := amount + service_charge; -- causes compilation error
  END IF;
  ...
END debit_account;

Parameter aktual yang berhubungan dengan sebuah parameter formal IN dapat menjadi sebuah konstanta, literal, variable terinisialisasi, atau ekspresi. Tidak seperti parameter-parameter OUT dan IN OUT, parameter-parameter IN dapat diinisialisasi ke nilai-nilai default.

8.9.2. Menggunakan Mode OUT

Parameter OUT mengijinkan kita untuk mengembalikan nilai-nilai ke pemanggil dari sebuah subprogram. Di bagian dalam subprogram tersebut, sebuah parameter OUT bertindak seperti halnya sebuah variable. Hal ini berarti bahwa kita dapat menggunakan sebuah formal parameter OUT seperti jika ia sebelumya adalah variable lokal. Kita dapat mengubah nilainya atau mereferensi nilai tersebut dengan banyak cara, seperti ditunjukkan oleh contoh berikut ini:

PROCEDURE calc_bonus (emp_id IN INTEGER, bonus OUT REAL) IS
  hire_date DATE;
  bonus_missing EXCEPTION;
BEGIN
  SELECT sal * 0.10, hiredate
  INTO bonus, hire_date
  FROM emp
  WHERE empno = emp_id;
  IF bonus IS NULL THEN
    RAISE bonus_missing;
  END IF;
  IF MONTHS_BETWEEN(SYSDATE, hire_date) > 60 THEN
    bonus := bonus + 500;
  END IF;
  ...
  EXCEPTION WHEN bonus_missing THEN
    ...
END calc_bonus;

Parameter aktual yang berhubungan dengan formal parameter OUT harus berupa sebuah variable; ia tidak dapat berupa sebuah konstanta atau sebuah ekspresi. Sebagai contoh, pemanggilan procedure berikut ini adalah ilegal:

calc_bonus(7499, salary + commission); -- menyebabkan compilation error

Sebuah parameter aktual OUT dapat memiliki sebuah nilai sebelum subprogram dipanggil. Namun, ketika kita memanggil subprogram tersebut, nilai tersebut hilang kecuali kita menentukan compiler hint NOCOPY atau subprogram keluar dengan sebuah unhandled exception.

Seperti halnya variables, parameter-parameter formal OUT diinisialisasi menjadi NULL. Jadi, tipe data dari sebuah formal parameter OUT tidak dapat berupa sebuah subtype yang didefinisikan sebagai NOT NULL (termasuk built-in subtypes NATURALN dan POSITIVEN). Sebaliknya, ketika kita memanggil subprogram tersebut, PL/SQL memunculkan VALUE_ERROR. Contohnya sebagai berikut:

DECLARE
  SUBTYPE Counter IS INTEGER NOT NULL;
  rows Counter := 0;
  PROCEDURE count_emps (n OUT Counter) IS
BEGIN
  SELECT COUNT(*) INTO n FROM emp;
END;
BEGIN
  count_emps(rows); -- menimbulkan VALUE_ERROR

Sebelum keluar dari subprogram, secara eksplisit kita berikan nilai ke seluruh parameter-parameter formal OUT. Sebaliknya, parameter-parameter aktual yang berhubungan akan menjadi null. Jika kita keluar secara sukses, PL/SQL memberikan nilai-nilai ke parameter-parameter aktual. Namun, jika kita keluar dengan sebuah unhandled exception, PL/SQL tidak memberikan nilai-nilai ke parameter-parameter aktual.

 

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26


Bookmark and Share

 

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, Uranus dsb.

 

Find Related articles