a. Giới thiệu PL/SQL
PL/SQL là một ngôn ngữ lập trình dùng để truy nhập vào CSDL Oracle từ nhiều môi trường khác nhau. PL/SQL được tích hợp trên Server CSDL cho nên nó có thể được thực hiện nhanh và hiệu quả. PL/SQL có nhiều ưu điểm so với các ngôn ngữ lập trình khác về mặt quản lý logic và hỗ trợ các quy luật hoạt động của các ứng dụng CSDL. Đó là một ngôn ngữ đặc biệt, hoàn thiện cho phép kết hợp ngôn ngữ thủ tục truyền thống với truy xuất các đối tượng CSDL thông qua SQL. Mă PL/SQL được sử dụng để giao tiếp với cơ sở dữ liệu được lưu trữ trực tiếp trong cơ sở dữ liệu Oracle, và là ngôn ngữ lập trình duy nhất giao tiếp với cơ sở dữ liệu Oracle một cách tự nhiên bên trong môi trường cơ sở dữ liệu. PL/SQL không thể hoàn thiện nếu không có sự tương tác dễ dàng với cơ sở dữ liệu Oracle. Bất kỳ xử lý hay thay đổi dữ liệu nào cũng được hoàn thành trong PL/SQL mà không cần thêm môi trường lập trình nào khác. Không có giao tiếp ODBC, cũng không cần nhúng bất cứ phép xử lý dữ liệu nào.
b. Các đặc điểm của PL/SQL
- Cấu trúc khối: đơn vị cơ bản của PL/SQL là một khối. Tất cả các chương trình của PL/SQL được xây dựng từ những khối. Mỗi khối là một đơn vị công việc logic trong một chương trình. Cấu trúc của một khối như sau:
DECLARE
/* Phần khai báo – các biến, kiểu, cursor và chương trình con nằm ở đây */
BEGIN
/* Phần thực hiện – các thủ tục và câu lệnh SQL nằm ở đây. Đây là phần
chính và yêu cầu phải có. */
EXCEPTION
/* Phần kiểm soát lỗi */
END;
- Biến và kiểu: PL/SQL hỗ trợ các biến và kiểu tương tự như ngôn ngữ lập trình khác. PL/SQL cũng cho phép sử dụng các kiểu dữ liệu người dùng định nghĩa như kiểu bảng (Table) và kiểu bản ghi (Record)
- Cấu trúc vòng lặp và rẽ nhánh: Cũng như ngôn ngữ lập trình bậc cao như Pascal, Visual Basic…PL/SQL cho phép sử dụng các cấu trúc điều khiển điều kiện và cấu trúc lặp
- Cursor: được dùng để thao tác với nhiều hàng dữ liệu lấy từ CSDL (dùng câu lệnh Select). Bằng cách sử dụng Cursor, chương trình có thể duyệt một cách dễ dàng toàn bộ các hàng dữ liệu. Để xử lý câu lệnh SQL, Oracle tạo ra một vùng nhớ gọi là vùng ngữ cảnh (Context Area). Vùng ngữ cảnh chứa những thông tin cần thiết để hoàn thành một quá trình, bao gồm số hàng được xử lý bởi câu lệnh, con trỏ tới câu lệnh. Trong trường hợp một Query, vùng ngữ cảnh là một tập hợp các hàng được trả về bởi Query đó. Cursor là một thẻ (Handle) hoặc một con trỏ (Pointer) trỏ tới vùng ngữ cảnh. Thông qua Cursor, một chương trình PL/SQL có thể điều khiển vùng ngữ cảnh, 4 bước cần thiết để xử lý Cursor:
Khai báo Cursor
Mở Cursor để thực hiện Query
Đưa kết quả vào biến PL/SQL
Đóng Cursor
c. Cấu trúc của PL/SQL
Có thể nói PL/SQL là ngôn ngữ cấu trúc khối (Block-Structure). Đơn vị cơ bản trong mỗi chương trình PL/SQL là khối. Tất cả các chương trình PL/SQL đều được hợp thành từ những khối. Các khối có thể tuần tự hoặc lồng nhau. Mỗi khối liên quan đến một vấn đề hoặc một vấn đề con cần được giải quyết. PL/QL hỗ trợ cách tiếp cận giải quyết vấn đề theo kiểu “chia để trị”.
Có một vài kiểu khối bao gồm:
- Khối không tên (Anonymous Block): thường được xây dựng tự động và được thực hiện duy nhất một lần.
- Khối có tên (Named Block): là những khối không tên với nhãn được gán cho tên của khối.
- Chương trình con (Subprogram): là những thủ tục (Procedure), gói (Package) và hàm (Function) được lưu trong cơ sở dữ liệu. Những khối này thường không thay đổi một khi đã được xây dựng và chúng được thực hiện nhiều lần. Thực hiện chương trình con bằng lời gọi thủ tục, gói hoặc hàm cần thực hiện.
- Trigger: tương tự như chương trình con, chúng cũng được lưu trong cơ sở dữ liệu và được thực hiện nhiều lần, đồng thời ít thay đổi sau khi tạo ra. Trigger được thực hiện mỗi khi có một sự kiện được kích hoạt.
Trong mỗi khối của chương trình, PL/SQL đều có những phần tách biệt nhau: phần khai báo, phần thực hiện và phần kiểm soát lỗi. Chỉ có phần thực hiện là bắt buộc phải có còn hai phần kia có thể có hoặc không.
Phần khai báo là nơi mà tất cả các biến, cursor và các kiểu dùng trong khối được khai báo. Những hàm và thủ tục địa phương cũng có thể được khai báo ở đây. Phần thực hiện là phần chính của khối, là nơi thực hiện công việc của khối. Phần này bao gồm các câu lệnh SQL và những câu lệnh gọi thủ tục. Lỗi được kiểm soát trong phần kiểm soát lỗi. Mã chương trình này chỉ được thực hiện khi có lỗi xảy ra. Trong PL/SQL có 2 loại lỗi chính là: Compile (lỗi phát sinh khi dịch) và Run-time (lỗi phát sinh khi chạy). PL/SQL kiểm soát lỗi thông qua ngoại lệ (Exceptions) và xử lý ngoại lệ (Exception Handlers). Exception được thiết kế để xử lý những lỗi phát sinh khi chạy chương trình, còn đối với những lỗi phát sinh khi dịch sẽ được phát hiện bởi PL/SQL và trả về thông báo cho người sử dụng. Khi có lỗi phát sinh, một ngoại lệ được phát sinh, quyền điều khiển được chuyển sang phần kiểm soát lỗi. Nhờ việc thiết kế phần mềm kiểm soát lỗi một cách độc lập nên tính logic của chương trình dễ hiểu hơn, đồng thời nó cũng bảo đảm tất cả mọi lỗi sẽ được kiểm soát. Những từ khoá DECLARE, BEGIN, EXCEPTION và END ngăn cách những khối với nhau.
Ví dụ:
// Tạo bảng SinhVien
CREATE OR REPLACE TYPE SinhVien AS OBJECT (
maSV NUMBER,
tenSV VARCHAR2(20),
ngaySinh DATE,
);
CREATE TABLE SinhVien_T OF SinhVien;
// Xây dựng khối PL/SQL
DECLARE
// Bắt đầu phần khai báo
maSVs NUMBER(5) := 10;
tenSVs VACHAR2(20);
BEGIN
// Bắt đầu phần thực hiện
// Tìm tên của sinh viên có maSV = 10
SELECT tenSV INTO tenSVs FROM SinhVien_T WHERE maSV =
maSVs;
EXCEPTION
// Bắt đầu phần kiểm soát lỗi
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT('Sinh vien co ma so 10 khong ton tai');
END;
d. Hàm và thủ tục trong PL/SQL
Hàm và thủ tục trong PL/SQL rất giống hàm và thủ tục trong các ngôn ngữ lập trình cấp cao.
- Thủ tục (Procedure)
Cú pháp để tạo một thủ tục:
CREATE OR REPLACE PROCEDURE Tên_thủ_tục
[(Tham_đối [IN | OUT | IN OUT] kiểu,
…
Tham_đối [IN | OUT | IN OUT] kiểu )] IS / AS
Thân_thủ_tục
Trong đó:
IN (tham trị): giá trị hiện tại của tham đối được truyền vào trong thủ tục khi thủ tục đó được gọi. Bên trong thủ tục, dạng của tham đối được xem là read-only, nghĩa là không thể được thay đổi. Khi kết thúc thủ tục, quyền điều khiển được trả về cho môi trường, giá trị của tham đối không đổi.
OUT (tham biến): mọi giá trị của tham đối khi bắt đầu lời gọi thủ tục đều bị bỏ qua. Trong thủ tục, dạng của tham đối được coi là write-only. Khi kết thúc thủ tục, nội dung của tham đối trong thủ tục được chuyển lại cho môi trường hiện tại.
IN OUT (vừa là tham biến vừa là tham trị): kiểu này kết hợp cả hai kiểu IN và OUT. Giá trị của tham đối hiện tại được chuyển vào trong thủ tục khi thủ tục được gọi. Bên trong thủ tục, tham đối này có thể được đọc và ghi. Khi kết thúc thủ tục, nội dung của tham đối trong thủ tục được chuyển lại cho môi trường hiện tại.
- Hàm (Function)
Cú pháp để tạo hàm tương tự như cú pháp tạo thủ tục:
CREATE [OR REPLACE] FUNCTION Tên_hàm
[(Tham_đối [IN | OUT | IN OUT] kiểu,
…
Tham_đối [IN | OUT | IN OUT] kiểu )]
RETURN Kiểu_trả_về IS | AS
Thân_hàm
Bên trong thân hàm, câu lệnh Return được dùng để trả về một giá trị. Hàm có những tính chất tương tự như thủ tục:
Hàm có thể trả về nhiều hơn một giá trị thông qua tham đối OUT.
Mã lệnh của hàm cũng gồm 3 phần: khai báo, thực hiện và điều khiển lỗi.
Hàm có thể nhận giá trị mặc định.
Để xoá hàm và thủ tục ta dùng: DROP PROCEDURE Tên_thủ_tục
DROP FUNCTION Tên_hàm
» Tin mới nhất:
» Các tin khác: