Memperkenalkan PL / SQL Package
Paket PL / SQL adalah sekelompok fungsi, prosedur, tipe, kursor, dll yang terkait. Paket PL / SQL seperti sebuah perpustakaan yang pernah ditulis tersimpan dalam database Oracle dan dapat digunakan oleh banyak aplikasi.
Paket PL / SQL memiliki dua bagian: spesifikasi paket dan body kemasan.
Spesifikasi paket adalah antarmuka umum aplikasimu. Masyarakat berarti fungsi, prosedur, jenis, dll yang tersimpan dapat diakses dari aplikasi lain.
Sebuah paket berisi kode yang mengimplementasikan spesifikasi paket.
Membuat Spesifikasi Paket PL / SQL
Spesifikasi paket diperlukan saat kamu membuat paket baru. Spesifikasi paket mencantumkan semua objek yang dapat diakses publik dari aplikasi lain. Spesifikasi paket juga menyediakan informasi yang perlu diketahui pengembang agar bisa menggunakan antarmuka. Singkatnya, spesifikasi paket adalah paket API.
Jika spesifikasi paket tidak berisi fungsi tersimpan, prosedur dan tidak diperlukan kode pribadi, kamu tidak perlu memiliki badan paket. Paket ini hanya berisi deklarasi tipe definisi dan variabel. Variabel tersebut dikenal sebagai data paket. Lingkup data paket bersifat global terhadap aplikasi.
Disarankan agar kamu menyembunyikan data paket sebanyak mungkin dan gunakan dan atur fungsi untuk membaca dan menulis data itu. Dengan melakukan ini, kamu dapat mencegah agar data paketmu tidak diubah secara tidak sengaja.
Penting untuk dicatat bahwa kamu harus mengkompilasi spesifikasi paket sebelum badan paket.
Berikut adalah sintaks untuk membuat spesifikasi paket PL / SQL:
CREATE [OR REPLACE] PACKAGE package_name
[ AUTHID { CURRENT_USER | DEFINER } ]
{ IS | AS }
[definitions of public TYPES
,declarations of public variables, types, and objects
,declarations of exceptions
,pragmas
,declarations of cursors, procedures, and functions
,headers of procedures and functions]
END [package_name];
Pernyataan CREATE PACKAGE digunakan untuk menentukan spesifikasi paket baru. Jika kamu ingin membangun kembali paket yang ada, kamu dapat menggunakan REPLACE keyword dan bukan kata kunci CREATE keyword. Dalam spesifikasi paket, kamu dapat menentukan jenis baru, menyatakan variabel global, jenis, objek, pengecualian, kursor, prosedur, dan fungsi.
Berikut adalah contoh pembuatan spesifikasi paket baru yang disebut personel. Personnel package berisi dua fungsi: get_fullname () dan get_salary () berdasarkan ID karyawan.
CREATE OR REPLACE PACKAGE personnel AS
-- get employee's fullname
FUNCTION get_fullname(n_emp_id NUMBER)
RETURN VARCHAR2;
-- get employee's salary
FUNCTION get_salary(n_emp_id NUMBER)
RETURN NUMBER;
END personnel;
Membuat PL / SQL Package Body
PL / SQL package body berisi semua kode yang mengimplementasikan fungsi, prosedur, dan kursor yang tersimpan dalam spesifikasi paket.
Berikut ini menggambarkan sintaks pembuatan body pack:
CREATE [OR REPLACE] PACKAGE BODY package_name
{ IS | AS }
[definitions of private TYPEs
,declarations of private variables, types, and objects
,full definitions of cursors
,full definitions of procedures and functions]
[BEGIN
sequence_of_statements
[EXCEPTION
exception_handlers ] ]
END [package_name];
Sintaksnya mirip dengan spesifikasi paket kecuali untuk kata kunci BODY dan kode spesifikasi paket yang diimplementasikan.
Badan paket dapat berisi bagian inisialisasi paket opsional yang muncul di bagian akhir body kemasan. Bagian inisialisasi paket dimulai dengan kata kunci BEGIN key dan diakhiri dengan EXCEPTION section atau END keyword dari paket. Bagian inisialisasi paket dijalankan saat aplikasi merujuk ke elemen paket pada saat pertama.
Berikut ini mengilustrasikan badan paket personnel package:
/*
Package personnel body
*/
CREATE OR REPLACE PACKAGE BODY personnel AS
-- get employee's fullname
FUNCTION get_fullname(n_emp_id NUMBER) RETURN VARCHAR2 IS
v_fullname VARCHAR2(46);
BEGIN
SELECT first_name || ',' || last_name
INTO v_fullname
FROM employees
WHERE employee_id = n_emp_id;
RETURN v_fullname;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
WHEN TOO_MANY_ROWS THEN
RETURN NULL;
END; -- end get_fullname
-- get salary
FUNCTION get_salary(n_emp_id NUMBER) RETURN NUMBER IS
n_salary NUMBER(8,2);
BEGIN
SELECT salary
INTO n_salary
FROM employees
WHERE employee_id = n_emp_id;
RETURN n_salary;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
WHEN TOO_MANY_ROWS THEN
RETURN NULL;
END;
END personnel;
Mengacu pada elemen paket PL / SQL
kamu bisa mengacu pada elemen paket dengan menggunakan notasi titik:
package_name.package_element
Kode berikut menggambarkan bagaimana menggunakan personnelpackage dengan memanggil fungsinya:
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
n_salary NUMBER(8,2);
v_name VARCHAR2(46);
n_emp_id NUMBER := &emp_id;
BEGIN
v_name := personnel.get_fullname(n_emp_id);
n_salary := personnel.get_salary(n_emp_id);
IF v_name IS NOT NULL AND
n_salary IS NOT NULL
THEN
dbms_output.put_line('Employee: ' || v_name);
dbms_output.put_line('Salary:' || n_salary);
END IF;
END;
Dalam tutorial ini, kamutelah belajar membuat paket PL / SQL lengkap dan bagaimana cara menggunakannya di program lain.
sumber: http://www.plsqltutorial.com