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 đó.

Một phần của tài liệu Giao_Trinh_Oracle_SQL_PLSQL_Co_Ban_1 (Trang 97 - 101)

- 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.

Một phần của tài liệu Giao_Trinh_Oracle_SQL_PLSQL_Co_Ban_1 (Trang 97 - 101)

Tải bản đầy đủ (DOC)

(107 trang)
w