- 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 c ủ a
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 đó.
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.