PL/SQL là gì? Tìm hiểu chi tiết về PL/SQL

869 lượt xem

Trong thế giới lập trình cơ sở dữ liệu, PL/SQL chiếm một vị trí quan trọng không thể phủ nhận. Là ngôn ngữ lập trình thủ tục do Oracle phát triển, PL/SQL mang đến một loạt các tính năng mạnh mẽ cho các nhà phát triển để tối ưu hóa và quản lý cơ sở dữ liệu Oracle một cách hiệu quả. Bài viết này sẽ giải đáp câu hỏi “PL/SQL là gì?” và đề cập đến những lợi ích mà nó mang lại.

PL/SQL Là Gì?

PL/SQL là một ngôn ngữ lập trình được phát triển bởi Oracle Corporation để thực hiện các tác vụ liên quan đến cơ sở dữ liệu trong hệ thống quản lý cơ sở dữ liệu Oracle. PL/SQL là viết tắt của “Procedural Language/Structured Query Language” và cung cấp các tính năng lập trình thủ tục, hàm và giao thức xử lý cơ sở dữ liệu, kết hợp với các lệnh SQL để truy cập và thao tác cơ sở dữ liệu.

PL/SQL là gì ?
PL/SQL là gì ?

Các Tính Năng Của PL/SQL

PL/SQL có các tính năng sau:

  • PL/SQL được tích hợp chặt chẽ với SQL.
  • Nó cung cấp khả năng kiểm tra lỗi rộng rãi.
  • Nó cung cấp nhiều kiểu dữ liệu.
  • Nó cung cấp nhiều cấu trúc lập trình khác nhau.
  • Nó hỗ trợ lập trình có cấu trúc thông qua các hàm và thủ tục.
  • Nó hỗ trợ lập trình hướng đối tượng.
  • Nó hỗ trợ phát triển các ứng dụng web và các trang máy chủ.

Đôi Điều Lưu Ý Về PL-SQL

Sau khi hiểu rõ rằng PL/SQL là phiên bản mở rộng của SQL, được thiết kế đặc biệt để tương tác với hệ quản trị cơ sở dữ liệu Oracle, dưới đây là một số gợi ý hữu ích dành cho các bạn khi làm việc với PL/SQL:

Embedded Language – Ngôn Ngữ Nhúng

PL/SQL là ngôn ngữ được nhúng và chỉ có thể hoạt động trong môi trường cơ sở dữ liệu Oracle. Nó không thể chạy độc lập như các ngôn ngữ lập trình thông thường khác như Java hay C++. Vì thế, các bạn nên lưu ý không nhầm lẫn PL/SQL với những ngôn ngữ lập trình độc lập khác.?

Do PL/SQL chỉ hoạt động trong hệ cơ sở dữ liệu Oracle, nên khi các bạn sử dụng các hệ quản trị cơ sở dữ liệu khác như Postgres hay MariaDB, PL/SQL sẽ không còn phù hợp hoặc có tác dụng. Vậy nên hãy chú ý điều này khi lựa chọn công nghệ cho các dự án cơ sở dữ liệu của mình.

Hiệu Suất Cao

PL/SQL được tạo ra đặc biệt để làm việc với hệ cơ sở dữ liệu, do đó, khi xét về hiệu suất, điều này không bao gồm hiệu suất thực thi vì nó phụ thuộc vào hệ cơ sở dữ liệu đang sử dụng. Tuy nhiên, nếu xem xét đến hiệu suất trong việc lập trình, PL/SQL thường được đánh giá cao hơn so với các ngôn ngữ khác như Java, Python, hay C++ về mặt dễ dàng và thuận tiện trong việc viết code. Dù các ngôn ngữ này cũng có khả năng kết nối và thao tác với cơ sở dữ liệu thông qua ODBC, nhưng PL/SQL vẫn nổi bật hơn trong việc tối ưu hóa quá trình xử lý dữ liệu.

Ngoài ra, khi nói về hiệu suất, PL/SQL còn cung cấp tính năng FORALL, giúp cải thiện hiệu suất đáng kể so với các ngôn ngữ lập trình khác. Việc sử dụng FORALL trong PL/SQL cho phép thực hiện các thao tác lô trên nhiều hàng dữ liệu cùng một lúc, thay vì xử lý từng hàng một như trong các ngôn ngữ khác, từ đó tăng tốc độ xử lý và giảm thời gian truy vấn.

Kiến Trúc Của PL/SQL

Trong đó, kiến trúc PL/SQL gồm có ba yếu tố chính đó là khối PL/SQL, công cụ PL/SQL và máy chủ cơ sở dữ liệu. Trong đó mỗi thành phần sẽ có những đặc điểm khác nhau. Cụ thể như sau:

Kiến trúc của PL/SQL
Kiến trúc của PL/SQL

PL/SQL Block

Một khối PL/SQL được bao quanh bởi các từ khóa BEGIN và END, và có thể bao gồm các câu lệnh DDL, DML, DCL cũng như các cấu trúc điều khiển như IF, LOOP, WHILE, và FOR. Những khối này có thể được lưu trữ và được gọi lại từ các ứng dụng khác nhau, hoặc được thực thi thông qua trình biên dịch hoặc các công cụ quản lý cơ sở dữ liệu.

PL/SQL Engine

PL/SQL Engine là một thành phần được tích hợp trong Oracle Database, chịu trách nhiệm biên dịch và thực thi các khối PL/SQL. Engine này điều khiển các khía cạnh quản lý bộ nhớ, bao gồm bộ đệm và bộ lưu trữ, để quản lý các biến, hàm, thủ tục và đối tượng PL/SQL. Bên cạnh đó, nó còn thực hiện các nhiệm vụ kiểm tra cú pháp, phân tích cú pháp và chuyển đổi các khối PL/SQL thành mã máy để thực thi.

Database Server

Database Server là phần mềm quản lý dữ liệu, hỗ trợ các chức năng như lưu trữ, truy xuất và cập nhật thông tin. Phần mềm này tích hợp PL/SQL Engine, đảm nhiệm việc biên dịch và thực thi các khối PL/SQL. Ngoài ra, Database Server cũng cung cấp các hàm và thủ tục PL/SQL, cho phép truy vấn và cập nhật dữ liệu hiệu quả trong cơ sở dữ liệu.

Sự Khác Biệt Giữa SQL Và PL/SQL

SQL

  • SQL là một truy vấn duy nhất được sử dụng để thực hiện các hoạt động DML và DDL.
  • SQL mang tính chất khai báo, xác định những gì cần phải làm, hơn là cách mọi thứ cần được thực hiện.
  • Thực thi như một câu lệnh duy nhất
  • Chủ yếu được sử dụng để thao tác dữ liệu
  • Tương tác với database server.
  • Không thể chứa mã PL/SQL trong đó.

PL/SQL

  • PL/SQL là một khối mã được sử dụng để viết toàn bộ khối chương trình/thủ tục/hàm, v.v…
  • PL/SQL là thủ tục xác định cách thức những việc cần được thực hiện.
  • Thực thi như một khối
  • Chủ yếu được sử dụng để tạo một ứng dụng.
  • Không tương tác với database server.
  • Là một extension của SQL, vì thế có thể chứa SQL bên trong

Các Câu Lệnh PL/SQL Cơ Bản

If/then/else

Thực hiện một hành động nếu điều kiện được đưa ra là đúng, hoặc thực hiện một hành động khác nếu điều kiện là sai:

Ví dụ: Kiểm tra giá trị của biến số và in ra thông báo tương ứng

 DECLARE

num INTEGER := 7;

BEGIN

IF num > 10 THEN

DBMS_OUTPUT.PUT_LINE(‘Giá trị của biến số lớn hơn 10’);

ELSE

DBMS_OUTPUT.PUT_LINE(‘Giá trị của biến số nhỏ hơn hoặc bằng 10’);

END IF;

END;

Loop

Thực hiện một khối chương trình lặp lại cho đến khi một điều kiện được đáp ứng.

Cú pháp:

 LOOP

— Do something here

EXIT WHEN <Condition>;

END LOOP;

Declare

Ví dụ: Khai báo một biến số nguyên trong PL/SQL

 DECLARE

num INTEGER := 10;

BEGIN

NULL;

END;

Begin/end

Đánh dấu một khối chương trình PL/SQL.

Ví dụ: In ra thông báo “Hello World!” trong PL/SQL

 BEGIN

DBMS_OUTPUT.PUT_LINE(‘Hello World!’);

END;

Case

Xác định hành động sẽ được thực hiện dựa trên giá trị của biến hoặc biểu thức.

Ví dụ: Xác định hành động thực hiện dựa trên giá trị của biến số

 DECLARE

color CHAR(10) := ‘green’;

BEGIN

CASE color

WHEN ‘red’ THEN DBMS_OUTPUT.PUT_LINE(‘Màu đỏ’);

WHEN ‘green’ THEN DBMS_OUTPUT.PUT_LINE(‘Màu xanh lá cây’);

WHEN ‘blue’ THEN DBMS_OUTPUT.PUT_LINE(‘Màu xanh dương’);

ELSE DBMS_OUTPUT.PUT_LINE(‘Không xác định’);

END CASE;

END;

While

Thực hiện một khối chương trình lặp lại cho đến khi một điều kiện không còn đúng.

Ví dụ: In ra các số chẵn từ 2 đến 10 trong PL/SQL

 DECLARE

i INTEGER := 2;

BEGIN

WHILE i <= 10 LOOP

DBMS_OUTPUT.PUT_LINE(i);

i := i + 2;

END LOOP;

END;

For

Thực hiện một khối chương trình lặp lại cho một tập hợp các giá trị được chỉ định trước.

Ví dụ: In ra các số lẻ từ 1 đến 9 trong PL/SQL

 DECLARE

i INTEGER;

BEGIN

FOR i IN 1..9 LOOP

IF i MOD 2 <> 0 THEN

DBMS_OUTPUT.PUT_LINE(i);

END IF;

END LOOP;

END;

Cursor

Định nghĩa một con trỏ để duyệt và truy xuất dữ liệu từ một tập hợp kết quả được trả về từ một truy vấn SQL.

Ví dụ: Lấy ra danh sách các khách hàng trong PL/SQL sử dụng con trỏ

 DECLARE

CURSOR c1 IS SELECT customer_name FROM customers;

customer_name customers.customer_name%TYPE;

BEGIN

OPEN c1;

LOOP

FETCH c1 INTO customer_name;

EXIT WHEN c1%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(customer_name);

END LOOP;

CLOSE c1;

END;

Exception

Xử lý các ngoại lệ và thông báo lỗi trong chương trình.

Ví dụ: Xử lý lỗi trong PL/SQL

 DECLARE

num1 INTEGER := 10;

num2 INTEGER := 0;

result INTEGER;

BEGIN

BEGIN

result := num1 / num2;

EXCEPTION

WHEN ZERO_DIVIDE THEN

DBMS_OUTPUT.PUT_LINE(‘Không thể chia cho số 0’);

END;

END;

Return

Trả về giá trị từ một chương trình hoặc hàm.

Ví dụ: Tính tổng của hai số và trả về kết quả trong PL/SQL

DECLARE

FUNCTION add_numbers(num1 INTEGER, num2 INTEGER) RETURN INTEGER IS

sum INTEGER;

BEGIN

sum := num1 + num2;

RETURN sum;

END;

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Tổng của hai số là: ‘ || add_numbers(10, 20));

END;

Ưu Nhược Điểm Của PL/SQL

Ưu Điểm

  • Hiệu suất của PL/SQL: Cung cấp hiệu suất tốt hơn trong một số trường hợp cụ thể, không áp dụng cho tất cả các tình huống.
  • Hỗ trợ Lập trình Hướng Đối Tượng: PL/SQL hỗ trợ các nguyên tắc lập trình hướng đối tượng như kế thừa, rất thuận tiện cho các nhà phát triển quen thuộc với OOP.
  • Công cụ Phát Triển Web: PL/SQL hỗ trợ nhiều công cụ để phát triển ứng dụng web, mở rộng khả năng ứng dụng của ngôn ngữ này trong lĩnh vực phát triển web.

Nhược Điểm

    • Độc quyền Oracle: Là ngôn ngữ đặc thù cho Oracle Database, không thể áp dụng trên các hệ quản trị cơ sở dữ liệu khác.
    • Độ khó: Có thể gặp khó khăn khi học và sử dụng cho người mới hoặc những ai không quen thuộc với Oracle Database.
    • Hạn chế về tính năng lập trình: Thiếu hỗ trợ cho một số tính năng như đa kế thừa, đa hình và kiểu dữ liệu động, có thể gây khó khăn trong phát triển các ứng dụng phức tạp.

Ví dụ 

Đây là một ví dụ về việc sử dụng ngôn ngữ PL/SQL để xử lý các thao tác dữ liệu trong cơ sở dữ liệu Oracle. Mã PL/SQL này thực hiện các thao tác sau:

-- available online in file 'sample1'
// Khai báo biến x bằng 100
DECLARE
   x NUMBER := 100;
BEGIN
   // Lặp i từ 1 tới 10
   FOR i IN 1..10 LOOP
      // Nếu i chia hết cho 2, i là số chẵn
      IF MOD(i,2) = 0 THEN     -- i is even
         // Thêm vào bảng tạm 1 dòng với cột thứ 3 kiểu chuỗi nói rằng i là số chẵn
         INSERT INTO temp VALUES (i, x, 'i is even');
      ELSE
         // Ngược lại thì cũng insert một dòng như i là số lẻ
         INSERT INTO temp VALUES (i, x, 'i is odd');
      END IF;
      // Tăng giá trị x thêm 100
      x := x + 100;
   END LOOP;
   // Chạy hết tất cả trong vòng for rồi insert một lượt vào DB, kiểu thực hiện toàn bộ câu iinssert một lần
   COMMIT;
END;

Lợi Ích Của Việc Sử Dụng PL/SQL

Sử dụng PL/SQL đem lại nhiều lợi ích cho người dùng, trong đó có:

  • PL/SQL cho phép lập trình viên thực hiện các hoạt động xử lý dữ liệu ngay tại cơ sở dữ liệu, giảm thiểu sự cần thiết cho việc truyền dữ liệu qua mạng, từ đó nâng cao hiệu suất của ứng dụng.
  • PL/SQL bao gồm các tính năng bảo mật mạnh mẽ để đảm bảo dữ liệu trong cơ sở dữ liệu được an toàn khỏi các truy cập hoặc chỉnh sửa không phép.
  • PL/SQL cũng hỗ trợ các lập trình viên trong việc quản lý cơ sở dữ liệu, bao gồm tạo bảng, chỉnh sửa dữ liệu, đồng bộ hóa và sao lưu dữ liệu.
  • Tích hợp sâu với Oracle, PL/SQL cho phép phát triển ứng dụng đa nền tảng và dễ dàng tích hợp với các ứng dụng khác.
  • PL/SQL cung cấp các tính năng tối ưu hóa tài nguyên giúp giảm thiểu sử dụng bộ nhớ và không gian đĩa.
  • PL/SQL hỗ trợ lập trình viên trong việc phát triển và bảo trì thủ tục và hàm trong cơ sở dữ liệu một cách hiệu quả, đồng thời cung cấp các công cụ để phát hiện và sửa lỗi trong các thủ tục và hàm của ứng dụng.
Lợi ích của việc sử dụng PL/SQL
Lợi ích của việc sử dụng PL/SQL

Các Vấn Đề Thường Gặp Trong PL/SQL

Cũng giống như bất kỳ ngôn ngữ lập trình nào khác, PL/SQL cũng có thể gặp một số vấn đề. Sau đây là một số vấn đề thường gặp trong PL/SQL:

  • Lỗi Cú Pháp: Đây là lỗi thường gặp nhất, xuất hiện khi mã không được viết theo đúng cú pháp của ngôn ngữ, khiến cho trình biên dịch không thể hiểu mã lệnh.
  • Lỗi Thực Thi: Phát sinh trong trường hợp một câu lệnh không thể được thực hiện do nhiều nguyên nhân như dữ liệu không phù hợp, truy vấn sai hoặc các vấn đề về hệ thống.
  • Lỗi Runtime: Xảy ra trong quá trình chương trình đang chạy, có thể do thiếu bộ nhớ, tràn bộ đệm, hoặc các nguyên nhân khác gây ra sự cố trong chương trình.
  • Lỗi Xử Lý Lỗi: Dù PL/SQL có cơ chế để xử lý lỗi, nhưng nếu không áp dụng đúng cách, các lỗi này có thể dẫn đến vấn đề lớn, làm ảnh hưởng đến việc thực thi chương trình.
  • Hiệu Suất Thấp: Khi mã PL/SQL không được tối ưu hóa, chương trình có thể chạy chậm, đặc biệt khi xử lý dữ liệu lớn. Sử dụng thuật toán và cấu trúc dữ liệu hiệu quả có thể giải quyết vấn đề này.
  • Lỗi Cấu Trúc Dữ Liệu: Phát sinh khi cấu trúc dữ liệu được sử dụng không phù hợp hoặc sai lầm, gây ra sự cố trong quá trình xử lý dữ liệu.
  • Lỗi Không Đồng Bộ: Có thể xảy ra khi thực hiện các thao tác cập nhật trên cùng một bảng từ nhiều phiên bản PL/SQL, dẫn đến việc dữ liệu không được cập nhật một cách nhất quán.

Các Câu Hỏi Thường Gặp ?

Tại sao lại sử dụng PL/SQL thay vì chỉ dùng SQL?

PL/SQL cho phép người dùng thực hiện toàn bộ khối lệnh một cách nguyên tử, giúp tối ưu hóa hiệu suất và đảm bảo tính toàn vẹn dữ liệu khi thực hiện các giao dịch phức tạp. Nó cũng hỗ trợ tốt hơn trong việc xây dựng các ứng dụng lớn và bảo mật.

Làm thế nào để tạo một thủ tục lưu trữ trong PL/SQL?

Thủ tục lưu trữ có thể được tạo bằng cách sử dụng cú pháp CREATE PROCEDURE, sau đó định nghĩa các tham số đầu vào và đầu ra, và khối lệnh thực hiện các tác vụ cụ thể.

Có thể sử dụng PL/SQL ở đâu?

PL/SQL được sử dụng chủ yếu trong các ứng dụng Oracle Database để tạo các thủ tục lưu trữ, chức năng, gói và trigger, giúp tự động hóa và tối ưu hóa xử lý dữ liệu.

PL/SQL có hỗ trợ xử lý ngoại lệ không?

Có, PL/SQL cung cấp khả năng xử lý ngoại lệ mạnh mẽ thông qua các câu lệnh EXCEPTION để quản lý các lỗi và vấn đề phát sinh trong quá trình thực thi các thủ tục.

Kết Luận

PL/SQL không chỉ là một công cụ lập trình mạnh mẽ mà còn là một phần không thể thiếu trong việc phát triển và quản lý cơ sở dữ liệu Oracle. Với các tính năng vượt trội về tối ưu hóa truy vấn, bảo mật, xử lý lỗi, và tích hợp ứng dụng, PL/SQL chính là chìa khóa giúp các nhà phát triển tạo ra các giải pháp cơ sở dữ liệu hiệu quả và mạnh mẽ.