Oracle PL/SQL Create Package

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

 

1.Package trong Oracle là gì?

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.

 

2.Cách tạo Package trong Oracle PL/SQL.

-Cú pháp tạo Package Specification :

Cú páp tạo Package Specifiaction 

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 :

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.

-Các bước tạo Package như sau:

-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

Ví dụ 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

Ví dụ 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.Cách Test và Debug Package trong Oracle PL/SQL.

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 :