- Thay DEPTNO của các nhân viên này bằng DEPTNO của Boston Thay lương mỗi nhân viên bằng lương trung bình của bộ phậ n * 1.1 Thay commission
3. Private procedure (th tc riêng ph n): là các hàm, th tc có trong package và ch ỉ có th để ược tri u g i b i các hàm hay th t c khác trong package mà thôi ệọ ởủ ụ
4. Global variable (bi n t ng th ): là bi n đế ổ ể ế ược khai báo dùng trong toàn b package, ộ ng d ng bên ngoài tham chi u đ c t i bi n này.
ứ ụ ế ượ ớ ế
5. Private variable (bi n riêng ph n): là bi n đế ầ ế ược khai báo trong m t hàm, th t c thu c ộ ủ ụ ộ package. Nó ch có th đỉ ể ược tham chi u đ n trong b n thân hàm hay th t c đó. ế ế ả ủ ụ
14.3.2. T o package ạ
Ta có th t o package tr c ti p b ng dòng l nh sau: Cú phápể ạ ự ế ằ ệ khai báo ph n mô t package: ầ ả
CREATE [OR REPLACE] PACKAGE package_name IS | AS
public type and các item declarations subprogram specifications
END package_name;
V i: ớ
package_name Tên package
type and item declarations Ph n khai báo các bi n, ầ ế
h ng, cursor, ngo i l vàằ ạ ệ
ki u s d ng trong toàn bể ử ụ ộ
package
subprogram specifications Khai báo các hàm, th t c ủ ụ
PL/SQL
Cú pháp khai báo ph n thân package: ầ
CREATE [OR REPLACE] PACKAGE BODY package_name
Oracle c b n - SQL và PL/SQL ơ ả
IS | AS
private type and item declarations Khai báo các ki u ể
ch s d ng riêng ỉ ử ụ
trong package subprogram bodies N i dung c a ộ ủ
package END package_name;
V i: ớ
package_name
type and item declarations subprogram specifications Tên package Ph n khai báo các bi n, h ng, ầ ế ằ cursor, ngo i l và ki u ạ ệ ể Khai báo các hàm, th t c ủ ụ PL/SQL Ví d : ụ
-- Ph n khai báo c a package ầ ủ
CREATE OR REPLACE PACKAGE comm_package IS
v_comm number := 10; -- Khai báo bi n có giá tr kh i t o ế ị ở ạ
-- Khai báo th t c đ giao ti p v i bên ngoài ủ ụ ể ế ớ
PROCEDURE reset_comm (p_comm IN number); END comm_package;
-- Ph n thân c a package ầ ủ
CREATE OR REPLACE PACKAGE BODY comm_package IS
-- Hàm riêng ph n ch s d ng trong package ầ ỉ ử ụ
FUNCTION validate_comm (v_comm IN number) RETURN BOOLEAN IS v_max_comm number; BEGIN
SELECT max(comm) INTO v_max_comm FROM emp;
IF v_comm > v_max_comm THEN RETURN FALSE; ELSE
RETURN TRUE; END IF;
END validate_comm;
-- Th t c giao ti p v i bên ngoàiủ ụ ế ớ
PROCEDURE reset_comm
(p_comm IN number) IS
v_valid BOOLEAN; BEGIN
v_valid := validate_comm(p_comm); IF v_valid = TRUE THEN
v_comm := p_comm; ELSE RAISE_APPLICATION_ERROR(-20210,‘Invalid comm’); END IF: END reset_comm; END comm_package; 14.3.3. Hu package ỷ
Tương t nh vi c t o package, ta có th hu b hàm thông qua câu l nh SQL. Cú pháp: ự ư ệ ạ ể ỷ ỏ ệ
-- Hu ph n package specification ỷ ầ
DROP PACKAGE Tên package; -- Hu ph n package body ỷ ầ
DROP PACKAGE BODY Tên package;
Ví d : ụ
DROP PACKAGE comm_package;
DROP PACKAGE BODY comm_package;
14.3.4. L i ích c a vi c s d ng package ợ ủ ệ ử ụ Tăng tính phân nh các thành ph n (Modularity) ỏ ầ
Ta có th đóng gói các thành ph n, c u trúc có quan h logic v i nhau trong cùng m t module ng v i m tể ầ ấ ệ ớ ộ ứ ớ ộ package. Vi c k th a gi a các package r t đ n gi n, và đệ ế ừ ữ ấ ơ ả ược th c hi n m t cách trong sáng. ự ệ ộ
Đ n gi n trong vi c thi t k ng d ng ơ ả ệ ế ế ứ ụ
T t c các thông tin c n thi t cho vi c giao ti p đ u đấ ả ầ ế ệ ế ề ược đ t trong ph n đ c t c a package (packageặ ầ ặ ả ủ specification). N i dung ph n này có th độ ầ ể ược so n th o và biên d ch đ c l p v i ph n thân c a packageạ ả ị ộ ậ ớ ầ ủ (package body). Do đó, các hàm hay th t c có g i t i các thành ph n c a package có th đủ ụ ọ ớ ầ ủ ể ược biên d chị t t. Ph n thân c a package có th đố ầ ủ ể ược ti p t c phát tri n cho đ n khi hoàn thành ng d ng. ế ụ ể ế ứ ụ
n d u thông tin (hiding information)
ẩ ấ
Package cho phép s d ng các thành ph n bên trong dử ụ ầ ướ ại d ng public (công c ng) hay private (riêng t ).ộ ư Tuỳ theo yêu c u thi t k , ta có th cho phép truy nh p hay n d u thông tin. T đó, có th b o v đầ ế ế ể ậ ẩ ấ ừ ể ả ệ ược tính toàn v n d li u. ẹ ữ ệ
Nâng cao hi u su t s d ng ệ ấ ử ụ
Ngay khi g i m t hàm hay th t c b t kỳ trong package l n đ u tiên. Toàn b n i dung c a package sọ ộ ủ ụ ấ ầ ầ ộ ộ ủ ẽ được n p vào b nh . Do v y, các hàm và th t c con trong package g i đ n sau này có th th c hi nạ ộ ớ ậ ủ ụ ọ ế ể ự ệ ngay mà không c n ph i n p l i vào b nh . Vi c này làm gi m thi u thao tác truy xu t vào ra (I/O access)ầ ả ạ ạ ộ ớ ệ ả ể ấ nâng cao t c đ . ố ộ
Oracle c b n - SQL và PL/SQL ơ ả
Th c hi n quá t i (overloading) ự ệ ả
Package cho phép th c hi n quá t i đ i v i các hàm và th t c trong nó. Theo đó, các hàm và th t c khácự ệ ả ố ớ ủ ụ ủ ụ nhau có th để ược phép đ t trùng tên. Vi c này s nâng cao tính m m d o c a vi c s d ng hàm, th t cặ ệ ẽ ề ẻ ủ ệ ử ụ ủ ụ trong package.
14.3.5. M t s package chu n c a Oracle ộ ố ẩ ủ
Th t c ủ ụ Hàm
DBMS_ALERT Cung c p các s ki n v các thông đi p c a database ấ ự ệ ề ệ ủ
DBMS_APPLICATION_INFO Thông tin v các ho t đ ng hi n th i đ i v i database ề ạ ộ ệ ờ ố ớ
DBMS_DDL Biên d ch l i các hàm, th t c va package. Phân tích các ị ạ ủ ụ index, table, cluster,...
DBMS_DESCRIBE Tr v các di n gi i cho các tham s c a th t c, hàm ả ề ễ ả ố ủ ủ ụ
DBMS_JOB Lên k ho ch th c hi n các đo n mã l nh PL/SQL ế ạ ự ệ ạ ệ
DBMS_LOCK Cung c p các hàm cho phép yêu c u, gi i phóng, đi u ấ ầ ả ề ch nh các tr ng thái khoá (lock) đ i v i t ng đ i tỉ ạ ố ớ ừ ố ượng trên database.
DBMS_MAIL G i các message t Oracle Server t i Oracle*mail ử ừ ớ
DBMS_OUTPUT K t xu t các giá tr tr v t các hàm, th t c, trigger,.. ế ấ ị ả ề ừ ủ ụ
DBMS_PIPE Cho phép x lý g i đ ng th i các thông đi p ử ử ồ ờ ệ
DBMS_SESSION Cung c p các phép truy nh p SQL thay vì các câu l nh ấ ậ ệ session
DBMS_SHARED_POOL Cho phép l u gi các đ i tư ữ ố ượng trong vùng nh chia s . ớ ẻ
DBMS_SQL Cho phép s d ng l nh SQL đ ng đ truy xu t database ử ụ ệ ộ ể ấ
DBMS_TRANSACTION Đi u khi n các giao d ch, c i thi n và nâng cao hi u qu ề ể ị ả ệ ệ ả đ i v i các giao d ch nh và không phân tán ố ớ ị ỏ
DBMS_UTILITY Phân tích các đ i tố ượng trong t ng schema. ừ
UTL_FILE Cho phép truy xu t t i file ngay v i câu l nh PL/SQL ấ ớ ớ ệ