PL/SQL Subprograms

8.2. Keuntungan-keuntungan Subprograms

Subprograms menyediakan extensibility, maksudnya, mereka mengijinkan kita menyesuaikan bahasa PL/SQL untuk memenuhi kebutuhan-kebutuhan kita. Sebagai contoh, jika kita memerlukan sebuah procedure yang menciptakan departemen baru, kita dapat secara mudah menuliskannya, seperti contoh berikut ini:

PROCEDURE create_dept (new_dname VARCHAR2, new_loc VARCHAR2) IS
BEGIN
  INSERT INTO dept VALUES (deptno_seq.NEXTVAL, new_dname, new_loc);
END create_dept;

Subprograms juga menyediakan modularity, yang mengijinkan kita memecah sebuah program ke dalam modul-modul yang mudah di-manage, dan terdefinisi secara baik. Hal ini mendukung desain top-down dan pendekatan yang bijak untuk penyelesaian masalah.

Sebagai tambahan, subprograms mnaikkan reusability dan maintainability. Sekali divalidasi, sebuah subprogram dapat digunakan dengan percaya diri dalam banyak aplikasi. Jika definisinya berubah, hanya subprogram saja yang terpengaruh. Hal ini menyederhanakan pemeliharaan.

Akhirnya, subprogram membantu abstraction, proses mental dari mendapatkan sebuah kebersamaan dari sebuah pecahan-pecahan. Untuk menggunakan subprograms, kita harus mengetahui apa yang mereka lakukan, bukan bagaimana mereka bekerja. Sehingga, kita dapat mendesain aplikasi-aplikasi dari atas kebawah tanpa khawatir mengenai detil-detil implementasi. Dummy subprograms (stubs) memperbolehkan kita untuk menunda definisi procedures dan functions sampai kita mengetes dan men-debug program utama.

8.3. Memahami PL/SQL Procedures

Sebuah procedure adalah sebuah subprogram yang melakukan sebuah aksi tertentu. Kita menulis procedures menggunakan sintaks berikut ini:

[CREATE [OR REPLACE]]
PROCEDURE procedure_name[(parameter[, parameter]...)]
[AUTHID {DEFINER | CURRENT_USER}] {IS | AS}
[PRAGMA AUTONOMOUS_TRANSACTION;]
[local declarations]
BEGIN
  executable statements
  [EXCEPTION exception handlers]
END [name];

dimana parameter mengikuti sintaks berikut ini:

parameter_name [IN | OUT [NOCOPY] | IN OUT [NOCOPY]] datatype
[{:= | DEFAULT} expression]

Klausa CREATE mengijinkan kita untuk menciptakan standalone procedures, yang disimpan di dalam Oracle database. Kita dapat mengeksekusi perintah CREATE PROCEDURE secara interaktif dari SQL*Plus atau dari sebuah program dengan menggunakan native dynamic SQL.

Klausa AUTHID menentukan apakah stored procedure dieksekusi dengan privileges dari pemiliknya (default) atau user terkini dan apakah referensi-referensi yang tidak memenuhi syarat terhadap schema objects ditetapkan di dalam schema dari pemiliknya atau user terkini. Kita dapat menimpa kelakuan default ini dengan menentukan CURRENT_USER.

Kita dapat mengesampingkan kondisi default ini dengan menentukan CURRENT_USER.

Pragma AUTONOMOUS_TRANSACTION menginstruksikan PL/SQL compiler untuk menandai procedure sebagai autonomous (independent). Autonomous transaction mengijinkan kita untuk menghentikan sementara transaksi utama, melakukan operasi-operasi SQL, melakukan commit atau rollback terhadap operasi-operasi tersebut, kemudian melanjutkan kembali transaksi utama.

Kita tidak dapat memaksakan ukuran tipe data dari sebuah parameter. Sebagai contoh, deklarasi acct_id berikut ini tidak diperbolehkan karena memaksakan ukuran dari tipe data CHAR.

PROCEDURE reconcile (acct_id CHAR(5)) IS ... -- illegal

Namun, kita dapat menggunakan cara berikut ini untuk memaksakan ukuran tipe data parameter secara tidak langsung:

DECLARE
  SUBTYPE Char5 IS CHAR(5);
  PROCEDURE reconcile (acct_id Char5) IS ...

Sebuah procedure memiliki dua bagian: specification (spec untuk singkatnya) dan body. Spec dari procedure dimulai dengan keyword PROCEDURE dan diakhiri dengan nama procedure atau sebuah daftar parameter. Deklarasi-deklarasi parameter adalah opsional. Procedures yang tidak menerima parameter ditulis tanpa tanda kurung buka dan kurung tutup.

Body dari procedure dimulai dengan keyword IS (atau AS), dan diakhiri dengan keyword END diikuti dengan nama procedure (opsional). Body dari procedure memiliki tiga bagian: bagian declarative, bagian executable, dan bagian opsional exception-handling.

Bagian declarative mengandung deklarasi-deklarasi lokal, yang ditempatkan diantara keyword IS dan BEGIN. Keyword DECLARE, yang memperkenalkan deklarasi-deklarasi dalam anonymous PL/SQL block, tidak digunakan. Bagian executable mengandung perintah-perintah, yang ditempatkan diantara keywords BEGIN dan EXCEPTION (atau END). Paling tidak sebuah perintah harus muncul di  dalam bagian executable dari sebuah procedure. Perintah NULL memenuhi kebutuhan ini. Bagian exception-handling mengandung exception handlers, yang ditempatkan diantara keywords EXCEPTION dan END.

Mari kita perhatikan procedure raise_salary berikut ini, yang mana akan menambah gaji dari seorang karyawan dengan nilai tertentu:

PROCEDURE raise_salary (emp_id INTEGER, amount REAL) IS
  current_salary REAL;
  salary_missing EXCEPTION;
BEGIN
  SELECT sal
  INTO current_salary
  FROM emp
  WHERE empno = emp_id;
  IF current_salary IS NULL THEN
    RAISE salary_missing;
  ELSE
    UPDATE emp
    SET sal = sal + amount
    WHERE empno = emp_id;
  END IF;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      INSERT INTO emp_audit VALUES (emp_id, 'No such number');
    WHEN salary_missing THEN
      INSERT INTO emp_audit VALUES (emp_id, 'Salary is null');
END raise_salary;

Ketika dipanggil, procedure ini menerima nomor karyawan dan nilai yang akan ditambahkan ke gaji. Ia menggunakan nomor karyawan untuk menampilkan gaji saat ini dari database table emp. Jika nomor karyawan tidak ditemukan atau jika gaji saat ini adalah null, sebuah exception dimunculkan. Selain daripada itu, gaji di-update.

Sebuah procedure dipanggil sebagai sebuah perintah PL/SQL. Sebagai contoh, kita dapat memanggil procedure raise_salary seperti berikut ini:

raise_salary(emp_id, amount);

 

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 dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] PL/SQL Subprograms | Hastinapura […]

[…] Silahkan melanjutkan membaca pembahasan PL/SQL Subprograms […]

[…] Klausa AUTHID menentukan apakah seluruh subprogram-subprogram ter-package dijalankan dengan privileges dari definer (default) atau invoker-nya, dan apakah referensi tak terkualifikasi dari mereka terhadap schema objects ditetapkan di dalam schema dari definer atau invoker tersebut. Untuk informasi lebih, kita dapat membaca kembali pembahasan PL/SQL Subprograms. […]

[…] Dynamic SQLPL/SQL Object TypesPL/SQL PackagesPL/SQL SubprogramsInteraksi PL/SQL dengan […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word