Packages
Sekilas Packages :
• Kelompok logis terkait PL / SQL jenis, item, dan subprogram
• Terdiri dari dua bagian:
- Specification
- Body
• Tidak bisa dipanggil, parameter, atau bersarang
• Biarkan server Oracle untuk membaca beberapa objek ke dalam memori sekaligus
Mengembangkan Packages
• Menyimpan teks pernyataan CREATE PACKAGE dalam dua file SQL yang berbeda yang memfasilitasi modifikasi paket.
• Sebuah Packages spesifikasi dapat ada tanpa sebuah Packages body, tetapi Packages body tidak bisa ada tanpa Packages Specification.
Membuat Packages Specification
• Kelompok logis terkait PL / SQL jenis, item, dan subprogram
• Terdiri dari dua bagian:
- Specification
- Body
• Tidak bisa dipanggil, parameter, atau bersarang
• Biarkan server Oracle untuk membaca beberapa objek ke dalam memori sekaligus
Mengembangkan Packages
• Menyimpan teks pernyataan CREATE PACKAGE dalam dua file SQL yang berbeda yang memfasilitasi modifikasi paket.
• Sebuah Packages spesifikasi dapat ada tanpa sebuah Packages body, tetapi Packages body tidak bisa ada tanpa Packages Specification.
Membuat Packages Specification
Syntax:
CREATE [OR REPLACE] PACKAGE package_name
IS|AS
public type and item declarations
subprogram specifications
END package_name;
• Pilihan REPLACE hapus dan recreates Packages Specification.
• Variabel yang dideklarasikan dalam Packages Specification adalah diinisialisasi ke NULL secara default.
• Semua konstruksi dinyatakan dalam Packages Specification t yang terlihat bagi pengguna yang diberikan hak akses pada Packages.
• Variabel yang dideklarasikan dalam Packages Specification adalah diinisialisasi ke NULL secara default.
• Semua konstruksi dinyatakan dalam Packages Specification t yang terlihat bagi pengguna yang diberikan hak akses pada Packages.
Membuat Package Specification:
Example
CREATE OR REPLACE PACKAGE comm_package IS
g_comm NUMBER := 0.10; --initialized to 0.10
PROCEDURE reset_comm
(p_comm IN NUMBER);
END comm_package;
/
• G_COMM adalah variabel global dan diinisialisasi ke 0,10.
• RESET_COMM adalah public procesure yang diimplementasikan dalam package body.
• RESET_COMM adalah public procesure yang diimplementasikan dalam package body.
Membuat Package Body
Syntax:
CREATE [OR REPLACE] PACKAGE BODY package_name
IS|AS
private type and item declarations
subprogram bodies
END package_name;
• Pilihan REPLACE hapus dan recreates package body.
• Identifier didefinisikan hanya dalam package body merupakan private constructs. Ini tidak terlihat di luar package body
• Semua private constructs harus dideklarasikan sebelum mereka digunakan dalam public constructs.
• Identifier didefinisikan hanya dalam package body merupakan private constructs. Ini tidak terlihat di luar package body
• Semua private constructs harus dideklarasikan sebelum mereka digunakan dalam public constructs.
Membuat Package Body: Contoh
CREATE OR REPLACE PACKAGE BODY comm_package
IS
FUNCTION validate_comm (p_comm IN NUMBER)
RETURN BOOLEAN
IS
v_max_comm NUMBER;
BEGIN
SELECT MAX(commission_pct)
INTO v_max_comm
FROM employees;
IF p_comm > v_max_comm THEN RETURN(FALSE);
ELSE RETURN(TRUE);
END IF;
END validate_comm;
...
PROCEDURE reset_comm (p_comm IN NUMBER)
IS
BEGIN
IF validate_comm(p_comm)
THEN g_comm:=p_comm; --reset global variable
ELSE
RAISE_APPLICATION_ERROR(-20210,'Invalid commission');
END IF;
END reset_comm;
END comm_package;
/
Menjalankan Package Constructs
Example 1: Menjalankan function dari procedure di dalam package yang sama.
CREATE OR REPLACE PACKAGE BODY comm_package IS
. . .
PROCEDURE reset_comm
(p_comm IN NUMBER)
IS
BEGIN
IF validate_comm(p_comm)
THEN g_comm := p_comm;
ELSE
RAISE_APPLICATION_ERROR
(-20210, 'Invalid commission');
END IF;
END reset_comm;
END comm_package;
Example 2: Panggil prosedur package dari iSQL * Plus.
EXECUTE comm_package.reset_comm(0.15)
Example 3: Panggil package prosedur dalam sebuah skema yang berbeda.
EXECUTE scott.comm_package.reset_comm(0.15)
Example 4: Panggil package prosedur dalam remote database.
EXECUTE comm_package.reset_comm@ny(0.15)
Mendeklarasikan package tak bertubuh
CREATE OR REPLACE PACKAGE global_consts IS
mile_2_kilo CONSTANT NUMBER := 1.6093;
kilo_2_mile CONSTANT NUMBER := 0.6214;
yard_2_meter CONSTANT NUMBER := 0.9144;
meter_2_yard CONSTANT NUMBER := 1.0936;
END global_consts;
/
EXECUTE DBMS_OUTPUT.PUT_LINE('20 miles = '||20*
global_consts.mile_2_kilo||' km')
Referensi Variabel Publik dari Prosedur Stand-Alone
Example:
CREATE OR REPLACE PROCEDURE meter_to_yard
(p_meter IN NUMBER, p_yard OUT NUMBER)
IS
BEGIN
p_yard := p_meter * global_consts.meter_2_yard;
END meter_to_yard;
/
VARIABLE yard NUMBER
EXECUTE meter_to_yard (1, :yard)
PRINT yard
Menghapus Packages
Untuk menghapus package spesifikasi dan tbody,
menggunakan sintaks berikut:
menggunakan sintaks berikut:
DROP PACKAGE package_name;
Untuk menghapus package body, gunakan sintaks berikut:
DROP PACKAGE BODY package_name;
Panduan untuk Pengembangan Package
• Membangun Package untuk penggunaan umum.
• Tentukan Package spesifikasi sebelum Package body.
• Package Spesifikasi harus berisi hanya konstruksi yang Anda ingin menjadi publik.
• Tempatkan item di bagian deklarasi dari Package body ketika Anda harus menjaga mereka sepanjang sesi atau di transaksi.
• Perubahan pada Package spesifikasi memerlukan kompilasi ulang dari masing-masing subprogram referensi.
• Package Spesifikasi harus berisi sebagai konstruksi sesedikit mungkin.
Keuntungan dari Package• Membangun Package untuk penggunaan umum.
• Tentukan Package spesifikasi sebelum Package body.
• Package Spesifikasi harus berisi hanya konstruksi yang Anda ingin menjadi publik.
• Tempatkan item di bagian deklarasi dari Package body ketika Anda harus menjaga mereka sepanjang sesi atau di transaksi.
• Perubahan pada Package spesifikasi memerlukan kompilasi ulang dari masing-masing subprogram referensi.
• Package Spesifikasi harus berisi sebagai konstruksi sesedikit mungkin.
• Modularitas: Encapsulate konstruksi terkait.
• Mudah desain aplikasi: Kode dan compile specification dan body secara terpisah.
• Menyembunyikan informasi:
- Hanya deklarasi dalam package specification yang terlihat dan dapat diakses oleh aplikasi.
- Private constructs di package body tersembunyi dan tidak dapat diakses.
- Coding Semua tersembunyi dalam package body.
• Ditambahkan fungsi: persistensi variabel dan kursor
• Performa yang lebih baik:
- Seluruh paket ini dimuat ke memori ketika paket pertama direferensikan.
- Hanya ada satu salinan di memori untuk semua pengguna.
- Hirarki ketergantungan disederhanakan.
• Overloading: subprogram Beberapa dari nama yang sama
Tidak ada komentar:
Posting Komentar