PL/SQL Subprograms

8.6. Mempaket PL/SQL Subprogram Bersama-sama

Kita dapat mengelompokkan subprograms secara logikal di dalam sebuah package, yang disimpan di dalam database. Dengan demikian, subprograms dapat dibagi penggunaannya oleh banyak aplikasi. Subprogram specs diletakkan didalam package spec, dan subprograms body diletakkan didalam package body, dimana mereka tak terlihat terhadap aplikasi. Maka, packages memperbolehkan kita untuk menyembunyikan detil-detil implementasi. Contohnya adalah sebagai berikut:

CREATE PACKAGE emp_actions AS -- package spec
  PROCEDURE hire_employee (emp_id INTEGER, name VARCHAR2, ...);
  PROCEDURE fire_employee (emp_id INTEGER);
  PROCEDURE raise_salary (emp_id INTEGER, amount REAL);
  ...
END emp_actions;
CREATE PACKAGE BODY emp_actions AS -- package body
  PROCEDURE hire_employee (emp_id INTEGER, name VARCHAR2, ...) IS
  BEGIN
    ...
    INSERT INTO emp VALUES (emp_id, name, ...);
  END hire_employee;
  PROCEDURE fire_employee (emp_id INTEGER) IS
  BEGIN
    DELETE FROM emp WHERE empno = emp_id;
  END fire_employee;
  PROCEDURE raise_salary (emp_id INTEGER, amount REAL) IS
  BEGIN
    UPDATE emp SET sal = sal + amount WHERE empno = emp_id;
  END raise_salary;
  ...
END emp_actions;

Kita dapat mendefinisikan subprograms di dalam sebuah package body tanpa mendeklarasikan specs mereka didalam package spec. Namun, subprogram seperti ini hanya dapat dipanggil hanya dari dalam package tersebut.

Oracle MagazineOracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world’s largest enterprise software company.

For more information about Oracle, please visit their Web site at http://www.oracle.com. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Get Free Oracle Magazine

8.7. Parameter Aktual Versus Formal

Subprograms melewatkan informasi menggunakan parameters. Variable-variable atau ekspresi-ekspresi yang direferensi di dalam daftar parameter dari sebuah subprogram disebut dengan parameter aktual. Sebagai contoh, procedure berikut ini memanggil daftar dua parameter aktual emp_num dan amount:

raise_salary(emp_num, amount);

Pemanggilan procedure berikutnya menunjukkan bahwa ekspresi dapat digunakan sebagai parameter aktual:

raise_salary(emp_num, merit + cola);

Variable-variable yang dideklarasikan didalam sebuah subprogram spec dan direferensi di dalam body dari subprogram tersebut adalah parameter formal. Sebagai contoh, procedure berikut ini mendeklarasikan dua parameter formal bernama emp_id dan amount:

PROCEDURE raise_salary (emp_id INTEGER, amount REAL) IS
BEGIN
  UPDATE emp SET sal = sal + amount WHERE empno = emp_id;
END raise_salary;

Praktek pemrograman yang baik menggunakan nama berbeda untuk parameter-parameter aktual dan formal.

Ketika kita memanggil procedure raise_salary, parameter-parameter aktual dievaluasi dan hasil-hasilnya diberikan ke parameter-parameter formal terkait. Jika diperlukan, sebelum memberikan nilai dari sebuah parameter aktual kepada sebuah parameter formal, PL/SQL mengkonversi tipe data dari nilai tersebut. Sebagai contoh, pemanggilan terhadal raise_salary berikut ini adalah valid:

raise_salary(emp_num, '2500');

Parameter aktual dan parameter formal yang sesuai dengannya harus memiliki tipe-tipe data yang kompatibel. Sebagai contoh, PL/SQL tidak dapat mengkonversi tipe-tipe data antara DATE dan REAL. Juga, hasilnya harus dapat dikonversi ke tipe data yang baru. Pemanggilan procedure berikut ini memunculkan predefined exception VALUE_ERROR karena PL/SQL tidak dapat mengkonversi parameter aktual kedua ke sebuah angka:

raise_salary(emp_num, '$2500'); -- perhatikan tanda dollar

8.8. Notasi Posisi Versus Notasi Nama

Ketika memanggil sebuah subprogram, kita dapat menuliskan parameter-parameter aktual menggunakan notasi posisi atau nama. Dengan demikian, kita dapat menyatakan hubungan antara parameter aktual dan formal berdasarkan posisi atau nama. Sehingga, deklarasi-deklarasi berikut ini

DECLARE
  acct INTEGER;
  amt REAL;
  PROCEDURE credit_acct (acct_no INTEGER, amount REAL) IS ...

kita dapat memanggil procedure credit_acct tersebut dengan empat alternatif cara yang mirip:

BEGIN
  credit_acct(acct, amt); -- notasi posisi
  credit_acct(amount => amt, acct_no => acct); -- notasi nama
  credit_acct(acct_no => acct, amount => amt); -- notasi nama
  credit_acct(acct, amount => amt); -- notasi campuran

 

 

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