PL/SQL - Functions: A Beginner's Guide

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của các hàm PL/SQL. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ cùng nhau từng bước. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể tạo và gọi các hàm như một chuyên gia!

PL/SQL - Functions

Hàm PL/SQL là gì?

Trước khi chúng ta bắt đầu, hãy hiểu thế nào là một hàm. Hãy tưởng tượng một hàm như một người giúp việc nhỏ trong mã của bạn. Nó giống như một mini-chương trình trong chương trình chính của bạn thực hiện một nhiệm vụ cụ thể. Bạn cung cấp cho nó một số thông tin (chúng ta gọi là đầu vào hoặc tham số), nó thực hiện một số công việc, và sau đó nó trả lại một kết quả.

Ví dụ, hãy tưởng tượng bạn có một trợ lý robot (hãy gọi nó là FunctionBot) có thể tính diện tích của một hình tròn. Bạn告诉 FunctionBot bán kính của hình tròn, và nó nhanh chóng thực hiện phép toán và告诉 bạn diện tích. Đó chính là điều mà một hàm làm trong lập trình!

Tạo một hàm

Bây giờ, hãy học cách tạo hàm riêng của chúng ta trong PL/SQL. Cấu trúc cơ bản trông như thế này:

CREATE [OR REPLACE] FUNCTION function_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
RETURN return_datatype
IS
-- Phần khai báo
BEGIN
-- Phần thực thi
RETURN (value);
END;
/

Đừng để điều này làm bạn sợ hãi! Hãy cùng phân tích nó:

  1. CREATE [OR REPLACE] FUNCTION: Điều này告诉 Oracle rằng chúng ta muốn tạo một hàm mới (hoặc thay thế một hàm hiện có).
  2. function_name: Đây là tên chúng ta đặt cho hàm của mình.
  3. (parameter_name [IN | OUT | IN OUT] type [, ...]): Đây là các đầu vào mà hàm của chúng ta chấp nhận.
  4. RETURN return_datatype: Điều này xác định loại dữ liệu mà hàm của chúng ta sẽ trả lại.
  5. IS: Từ khóa này phân tách phần đầu của hàm với phần thân.
  6. Các từ khóa BEGINEND bao quanh mã chính của hàm của chúng ta.
  7. RETURN (value): Đây là nơi chúng ta xác định điều gì hàm của chúng ta nên trả lại.

Hãy tạo một hàm đơn giản để tính diện tích của một hình tròn:

CREATE OR REPLACE FUNCTION calculate_circle_area(radius NUMBER)
RETURN NUMBER
IS
pi CONSTANT NUMBER := 3.14159265359;
area NUMBER;
BEGIN
area := pi * radius * radius;
RETURN area;
END;
/

Đây là những gì đang xảy ra trong hàm này:

  1. Chúng ta đang tạo một hàm tên là calculate_circle_area.
  2. Nó chấp nhận một tham số đầu vào: radius, là một NUMBER.
  3. Nó sẽ trả lại một NUMBER (diện tích của hình tròn).
  4. Chúng ta định nghĩa một hằng số pi với giá trị của nó.
  5. Chúng ta tính diện tích bằng công thức: π * r^2.
  6. Cuối cùng, chúng ta trả lại diện tích đã tính.

Gọi một hàm

Bây giờ chúng ta đã tạo hàm của mình, làm thế nào để chúng ta sử dụng nó? Điều này được gọi là "gọi" hàm. Trong PL/SQL, bạn có thể gọi một hàm theo nhiều cách:

1. Trong một câu lệnh SELECT:

SELECT calculate_circle_area(5) AS circle_area FROM DUAL;

Điều này sẽ trả lại diện tích của một hình tròn có bán kính 5.

2. Trong một khối PL/SQL:

DECLARE
result NUMBER;
BEGIN
result := calculate_circle_area(7);
DBMS_OUTPUT.PUT_LINE('Diện tích của hình tròn là: ' || result);
END;
/

Điều này sẽ tính diện tích của một hình tròn có bán kính 7 và in kết quả.

3. Như một phần của một biểu thức lớn hơn:

DECLARE
radius NUMBER := 10;
diameter NUMBER;
BEGIN
diameter := 2 * radius;
DBMS_OUTPUT.PUT_LINE('Diện tích của một hình tròn có đường kính ' ||
diameter || ' là: ' ||
calculate_circle_area(radius));
END;
/

Điều này tính đường kính và sau đó sử dụng hàm của chúng ta để tìm diện tích.

Hàm đệ quy PL/SQL

Bây giờ, hãy nói về một điều gì đó nâng cao hơn: hàm đệ quy. Một hàm đệ quy là một hàm gọi chính nó. Nó giống như một con robot Nga - mở một cái, và bên trong có một cái khác!

Dưới đây là một ví dụ kinh điển: tính giai thừa của một số. Giai thừa của 5 (viết là 5!) là 5 4 3 2 1 = 120.

Hãy viết một hàm đệ quy để tính giai thừa:

CREATE OR REPLACE FUNCTION factorial(n NUMBER)
RETURN NUMBER
IS
BEGIN
IF n = 0 OR n = 1 THEN
RETURN 1;
ELSE
RETURN n * factorial(n - 1);
END IF;
END;
/

Hãy phân tích điều này:

  1. Nếu n là 0 hoặc 1, chúng ta trả lại 1 (đây là trường hợp cơ bản).
  2. Ngược lại, chúng ta nhân n với giai thừa của (n-1).
  3. Hàm này tiếp tục gọi chính nó với một số nhỏ hơn cho đến khi nó đạt đến trường hợp cơ bản.

Để sử dụng hàm này:

BEGIN
DBMS_OUTPUT.PUT_LINE('Giai thừa của 5 là: ' || factorial(5));
END;
/

Điều này sẽ输出: "Giai thừa của 5 là: 120"

Các phương pháp thông dụng với hàm PL/SQL

Dưới đây là bảng một số phương pháp thông dụng được sử dụng với hàm PL/SQL:

Phương pháp Mô tả Ví dụ
CREATE FUNCTION Tạo một hàm mới CREATE FUNCTION my_func...
REPLACE FUNCTION Thay thế một hàm hiện có CREATE OR REPLACE FUNCTION my_func...
RETURN Xác định kiểu trả lại và giá trị RETURN NUMBER; ... RETURN result;
CALL Gọi một hàm SELECT my_func(5) FROM DUAL;
DROP FUNCTION Xóa một hàm DROP FUNCTION my_func;
EXECUTE Thực thi một hàm EXECUTE my_func(10);

Nhớ rằng, thực hành là cách tốt nhất để trở thành người thạo! Đừng ngại thử nghiệm với các hàm này. Thử thay đổi các đầu vào, kết hợp các hàm, hoặc tạo các hàm độc đáo của riêng bạn. Càng chơi với chúng nhiều, bạn sẽ hiểu rõ hơn về cách chúng hoạt động.

Và thế là bạn đã bước đầu vào thế giới của các hàm PL/SQL. Từ việc tạo các máy tính đơn giản đến các bộ giải quyết vấn đề đệ quy, các hàm là công cụ mạnh mẽ sẽ làm cho mã của bạn hiệu quả hơn và dễ quản lý hơn. Hãy tiếp tục khám phá, tiếp tục lập trình, và quan trọng nhất, hãy vui vẻ!

Credits: Image by storyset