Jumat, 07 Januari 2011

Penjelasan tentang PL/SQL plus

Apa Itu PL/SQL Package?
Package adalah sebuah schema object yang mengelompokkan PL/SQL types, items, dan subprograms, yang terkait secara logikal. Packages biasanya memiliki dua bagian, sebuah specification dan sebuah body, meskipun kadangkala body tersebut tidak diperlukan. Specification (atau spec) merupakan antarmuka terhadap aplikasi-aplikasi kita; ia mendeklarasikan types, variables, constants, exceptions, cursors, dan subprograms yang tersedia untuk digunakan. Body secara penuh mendefinisikan cursors dan subprograms, dan juga mengimplementasikan spec.
Seperti ditunjukkan oleh Gambar 9-1, kita dapat memikirkan sebuah spec sebagai sebuah antarmuka operasional dan body sebagai sebuah “kotak hitam (black box)”. Kita dapat men-debug, meningkatkan, atau menimpa sebuah package body tanpa mengubah antarmuka (package spec) ke package tersebut.

Contoh Sebuah PL/SQL Package
Dalam contoh di bawah ini, kita mem-package sebuah record type, sebuah cursor, dan dua procedure kepegawaian. Perlu diingat bahwa procedure hire_employee menggunakan database sequence empno_seq dan function SYSDATE untuk menambahkan sebuah employee number baru dan hire date.
CREATE OR REPLACE PACKAGE emp_actions AS -- spec
TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL);
CURSOR desc_salary RETURN EmpRecTyp;
PROCEDURE hire_employee (
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER);
PROCEDURE fire_employee (emp_id NUMBER);
END emp_actions;
CREATE OR REPLACE PACKAGE BODY emp_actions AS -- body
CURSOR desc_salary RETURN EmpRecTyp IS
SELECT empno, sal FROM emp ORDER BY sal DESC;
PROCEDURE hire_employee (
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER) IS
BEGIN
INSERT INTO emp VALUES (empno_seq.NEXTVAL, ename, job, mgr,
SYSDATE, sal, comm, deptno);
END hire_employee;
PROCEDURE fire_employee (emp_id NUMBER) IS
BEGIN
DELETE FROM emp WHERE empno = emp_id;
END fire_employee;
END emp_actions;
Hanya deklarasi di dalam package yang terlihat dan dapat dikses terhadap aplikasi. Detil implementasi di dalam package body disembunyikan dan tidak dapat diakses. Jadi, kita dapat mengubah body (implementation) tanpa harus meng-compile ulang program-program yang memanggilnya.

Keuntungan-keuntungan dari PL/SQL Packages
Packages menawarkan beberapa keuntungan: modularitas, desain aplikasi yang lebih mudah, penyembunyian informasi, tambahan fungsionalitas, dan performa yang lebih baik.
Modularity
Packages mengijinkan kita untuk mengenkapsulasi secara logikal types, items, dan subprograms yang berhubungan di dalam sebuah PL/SQL module yang memiliki nama. Setiap package mudah dipahami, dan antarmuka antara packages adalah sederhana, jelas, dan didefinisikan dengan baik. Hal ini membantu pembangunan aplikasi.
Easier Application Design
Ketika mendesain sebuah aplikasi, seluruh yang kita butuhkan awalnya adalah informasi antarmuka di dalam package specs tersebut. Kita dapat mengkodekan dan meng-compile sebuah spec tanpa body-nya. Kemudian, stored subprograms yang mereferensi kepada package tersebut dapat di-compile juga. Kita tidak perlu mendefinisikan package bodies secara penuh sampai kita siap untuk menyelesaikan aplikasi.
Information Hiding
Dengan packages, kita dapat menentukan types, items, dan subprograms mana saja yang bersifat public (terlihat dan dapat diakses) atau yang private (tersembunyi dan tidak dapat diakses). Sebagai contoh, jika sebuah package mengandung empat subprograms, yang tiga mungkin public dan yang satu private. Package menyembunyikan implementasi dari private subprogram sehingga hanya package tersebut (bukan aplikasi kita) yang terpengaruh jika implementasi diubah. Hal ini memudahkan pemeliharaan dan peningkatan. Juga, dengan menyembunyikan detil implementasi dari pengguna, kita dapat melindungi integritas dari package tersebut.
Added Functionality
Variable-variable dan cursor-cursor public ter-package tetap ada selama satu session. Sehingga, mereka dapat digunakan secara bersama-sama oleh subprograms yang berjalan dalam environment tersebut. Juga, mereka memperbolehkan kita memelihara data melalui transaksi-transaksi tanpa harus menyimpannya di dalam database.
Better Performance
Ketika kita memanggil sebuah subprogram terpackage untuk pertama kali, seluruh package di-load ke memory. Sehingga, pemanggilan-pemanggilan berikutnya terhadap subprogram-subprogram terkait dengan di dalam package tersebut tidak memerlukan disk I/O. Juga, packages berhenti mengaitkan ketergantungan dan dengan demikian tidak memerlukan re-compile ulang yang tidak perlu. Sebagai contoh, jika kita mengubah implementasi dari sebuah function ter-package, Oracle tidak perlu meng-compile ulang subprogram-subprogram yang memanggilnya karena mereka tidak bergantung kepada package body.


Bentuk Umum Struktur PL/SQL

DECLARE
variabel tipe_data;
konstanta CONSTANT tipe_data := nilai;
...
BEGIN
statement_1;
statement_2;
...
EXCEPTION
WHEN nama_eksepsi THEN statement_untuk_mengatasi_error;
...
END;

Contoh Program (tanpa exception)

SQL> SET SERVEROUTPUT ON
SQL>DECLARE
v1 NUMBER(3);
BEGIN
v1 := 3;
DBMS_OUTPUT.PUT_LINE('v1= ' || v1);
END;
/
Contoh Program (dengan exception)
SQL>SET SERVEROUTPUT ON
SQL>DECLARE
X Integer;
BEGIN
X := ‘Belajar Oracle’;
DBMS_OUTPUT.PUT_LINE( TO_CHAR(X) );
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE (‘Kesalahan pada pengisian nilai’);
END;
/

DBMS_OUTPUT merupakan paket yang disediakan oleh Oracle PL / SQL dan PUT_LINE merupakan salah satu prosedur yang dikemas. Menampilkan nilai-nilai pada SQL Plus * terminal yang harus diaktifkan dengan SERVEROUTPUT SET ON terlebih dahulu. Untuk menjalankan kode sampel ini, login ke SQL * Plus. PL / SQL blok diakhiri dengan tanda garis miring / atau garis byitself.

1 komentar:

  1. kita juga punya nih jurnal oracle, silahkan dikunjungi dan dibaca , berikut linknya
    http://repository.gunadarma.ac.id/bitstream/123456789/4832/1/presentasi.pdf
    semoga bermanfaat yaa :)

    BalasHapus