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
| 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. |


































