Package trong Oracle là gì và làm thế nào để tạo Package trong Oracle PL/SQL? Bài viết này chúng tôi sẽ giúp bạn hiểu về Package trong Oracle và hướng dẫn cách tạo Package trong Oracle với PL/SQL Developer.
1. Package trong Oracle là gì?
2. Cách tạo Package trong Oracle PL/SQL.
3. Cách Test và Debug Package trong Oracle PL/SQL
Package trong Oracle là một chương trình bao gồm các thành phần như: kiểu dữ liệu (Type), Hằng (Constant), biến (Variable) lưu giữ giá trị và các hàm (Function), thủ tục (Procedure)... có mối liên hệ với nhau, được gộp chung lại.
Một Package gồm làm hai phần: Phần mô tả (specification) và Phần thân (body).
-Phần mô tả (specification) : là phần khai báo các thành phần của Package.
-Phần thân (body) : là phần cài đặt, thiết lập các thành phần cho phần mô tả (specification) ở trên.
Đặc điểm của package là khi một thành phần trong package được gọi tới thì toàn bộ nội dung của package sẽ được nạp vào trong hệ thống. Do đó, việc gọi tới các thành phần khác trong package sau này sẽ không phải mất thời gian nạp vào hệ thống nữa. Từ đó, nâng cao tốc độ thực hiện lệnh của toàn bộ hàm, thủ tục có trong package.
-Cú pháp tạo Package Specification :
CREATE OR REPLACE PACKAGE package_name IS
-- Khai báo các kiểu, biến công khai (Public)
-- Khai báo các hàm, thủ tục
-- Khai báo Kiểu type - Public :
type <TypeName> is <Datatype>;
-- Khai báo Hằng constant - Public
<ConstantName> constant <Datatype> := <Value>;
-- Khai báo Biến variable - Public
<VariableName> <Datatype>;
-- Khai báo hàm function hoặc thủ tục procedure - Public
function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;
END package_name;
-Cú pháp tạo Package Body :
CREATE OR REPLACE PACKAGE BODY package_name IS
-- Khai báo các kiểu, biến kiểu sử dụng riêng (Private)
-- Triển khai xây dựng các hàm, thủ tục đã khai báo trong phần Package Spec.
-- Khai báo Kiểu type - Private
type <TypeName> is <Datatype>;
-- Khai báo Hằng constant - Private
<ConstantName> constant <Datatype> := <Value>;
-- Khai báo Biến variable - Private
<VariableName> <Datatype>;
-- Thực hiện hàm Function và thủ tục procedure
function <FunctionName>(<Parameter> <Datatype>) return <Datatype> is
<LocalVariable> <Datatype>;
begin
<Statement>;
return(<Result>);
end;
BEGIN
-- Initialization
<Statement>;
END package_name;
Giả sử chúng tôi tạo một Package bao gồm : thủ tục (Procedure) thêm mới, sửa, xóa thông tin nhân viên và hàm (Function) lấy tên nhân viên theo mã nhân viên.
-Tạo Package trong PL/SQL Developer:
-Nhập tên Package mà bạn cần tạo.
-Package được PL/SQL Developer tạo ra với các gợi ý để viết Package.Sau đó bạn xóa hết các gợi ý đó rồi viết code theo yêu cầu bài toán của bạn.
Ví dụ ở đây chúng tôi tạo Package PKG_NHANVIEN bao gồm các thủ thục lấy danh sách nhân viên, thủ tục Insert thêm mới nhân viên và hàm lấy tên nhân viên theo mã nhân viên như sau:
-Tạo Package Spec : PKG_NHANVIEN
create or replace package PKG_NHANVIEN is
PROCEDURE p_Nhanvien_GetAllData(
p_Cursor_Nhanvien out sys_refcursor);
PROCEDURE p_Nhanvien_Insert(
pv_NhanvienName in varchar2,
pv_NhanvienAge in number,
pv_NhanvienSalary in number,
pv_NhanvienBirht in Date,
pv_NhanvienPhone in varchar2,
pv_NhanvienEmail in varchar2,
pv_NhanvienDept in int,
pv_Restult out varchar2
);
FUNCTION F_Nhanvien_GetName
(pv_NhanvienID in HR.Nhanvien.Nhanvien_Id%type)
RETURN varchar2 ;
end PKG_NHANVIEN;
-Tạo Package Body : PKG_NHANVIEN
create or replace package body PKG_NHANVIEN is
-- Thủ tục lấy tất cả danh sách nhân viên
procedure p_Nhanvien_GetAllData(
p_Cursor_Nhanvien out sys_refcursor) is
begin
Open p_Cursor_Nhanvien for
Select * from HR.nhanvien;
Exception
when No_Data_Found then
DBMS_OUTPUT.put_line('No Data');
end p_Nhanvien_GetAllData;
-------------------------------------------
--Thủ tục Insert thông tin Nhân Viên
procedure p_Nhanvien_Insert(
pv_NhanvienName in varchar2,
pv_NhanvienAge in number,
pv_NhanvienSalary in number,
pv_NhanvienBirht in Date,
pv_NhanvienPhone in varchar2,
pv_NhanvienEmail in varchar2,
pv_NhanvienDept in int,
pv_Restult out varchar2
) is
--Khai báo biến pv_Count đếm số lượng Nhân Viên.
pv_Count integer := 0;
begin
pv_Restult := '';
--Check kiểm tra số điện thoại của Nhân Viên
select count(*) into pv_Count from HR.nhanvien n where n.nhanvien_phone = pv_NhanvienPhone ;
if pv_Count > 0 then
pv_Restult := 'The Phone number was exited';
return;
end if;
-- Insert dữ liệu vào bảng nhaniven
Insert into HR.nhanvien(nhanvien_id,nhanvien_name, nhanvien_age, nhanvien_salary, nhanvien_birthday, nhanvien_phone, nhanvien_email, nhanvien_deptid)
VALUES(HR.SEQ_NHANVIEN.NEXTVAL, pv_NhanvienName, pv_NhanvienAge, pv_NhanvienSalary, pv_NhanvienBirht, pv_NhanvienPhone, pv_NhanvienEmail, pv_NhanvienDept) ;
pv_Restult := 'OK';
exception
when no_data_found then
pv_Restult := 'Error Exception';
end p_Nhanvien_Insert;
---------------------------------------------------
--Hàm Function lấy tên nhân viên theo Mã.
FUNCTION F_Nhanvien_GetName
(pv_NhanvienID in HR.Nhanvien.Nhanvien_Id%type)
RETURN varchar2
IS
pv_NhanvienName HR.nhanvien.nhanvien_name%type;
BEGIN
SELECT n.nhanvien_name INTO pv_NhanvienName
FROM HR.nhanvien n
WHERE n.nhanvien_id = pv_NhanvienID;
return pv_NhanvienName;
EXCEPTION
when no_data_found then
dbms_output.put_line('Error: No Data');
when Too_Many_Rows then
dbms_output.put_line('Error: Many rows data');
when others then
dbms_output.put_line('Error Exception');
END F_Nhanvien_GetName;
end PKG_NHANVIEN;
Sau khi tạo Package xong bạn có thể Test kiểm tra Package.
3.1 Cách Test Package trong Oracle PL/SQL.
-Click chọn Hàm hoặc Thủ tục trong Package sau đó chọn Test.
-Nhập giá trị đầu vào sau đó nhấn và biểu tượng Execute hoặc nhấn F8 để chạy và xem kết quả.
- Kết quả:
3.2 Cách Debug Package trong Oracle PL/SQL.
-Click chọn Hàm hoặc Thủ tục trong Package sau đó chọ Test.
-Nhập giá trị đầu vào sau đó nhấn biểu tượng Start Debugger hoặc nhấn F9 bắt đầu Debug.
-Nếu bạn muốn Debug từng bước thì nhấn vào biểu tượng Step Info hoặc (Ctr+N) như hình dưới đây :