Sabtu, 07 Januari 2012

Resume PBD 2 Pert 12 & 13


 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

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.

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.

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.

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
:

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

• 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