PL/SQL - Thủ tục: Hướng dẫn cho người mới bắt đầu

Xin chào các pháp sư PL/SQL tương lai! 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 thủ tục PL/SQL. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - 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 bước 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 ra các thủ tục của riêng mình như một chuyên gia!

PL/SQL - Procedures

Thủ tục PL/SQL là gì?

Trước khi chúng ta bắt đầu, hãy hiểu thế nào là một thủ tục. Hãy tưởng tượng một thủ tục như một công thức nấu ăn có thể tái sử dụng. Tương tự như bạn có thể có một công thức cho bánh quy sô-cô-la yêu thích mà bạn sử dụng đi sử dụng lại, một thủ tục là một tập hợp các câu lệnh SQL và PL/SQL mà bạn có thể gọi mỗi khi cần thực hiện một nhiệm vụ cụ thể.

Các phần của một chương trình con PL/SQL

Bây giờ, hãy phân tích cấu tạo của một chương trình con PL/SQL (bao gồm các thủ tục). Điều này giống như hiểu các phần khác nhau của một sandwich - mỗi thành phần có vai trò của riêng nó!

  1. Phần khai báo: Đây là nơi chúng ta giới thiệu các nguyên liệu (biến, hằng số, v.v.).
  2. Phần thực thi: Đây là nơi xảy ra phép màu - mã thực tế của chúng ta sẽ ở đây.
  3. Phần xử lý ngoại lệ: Đây là mạng an toàn của chúng ta, bắt các lỗi có thể xảy ra.

Dưới đây là một biểu diễn trực quan đơn giản:

DECLARE
-- Phần khai báo
BEGIN
-- Phần thực thi
EXCEPTION
-- Phần xử lý ngoại lệ
END;

Tạo một thủ tục

Hãy cất cánh và tạo thủ tục đầu tiên của chúng ta! Chúng ta sẽ bắt đầu với một điều gì đó đơn giản - một thủ tục in ra "Hello, World!".

CREATE OR REPLACE PROCEDURE say_hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/

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

  • CREATE OR REPLACE PROCEDURE: Điều này yêu cầu Oracle tạo một thủ tục mới hoặc thay thế một thủ tục hiện có với cùng tên.
  • say_hello: Đây là tên chúng ta đặt cho thủ tục của mình.
  • IS: Từ khóa này phân cách phần đầu thủ tục với phần thân.
  • BEGINEND: Các từ khóa này bao quanh phần thực thi.
  • DBMS_OUTPUT.PUT_LINE: Đây là một thủ tục内置 in văn bản.
  • /: Dấu này thực thi toàn bộ câu lệnh CREATE PROCEDURE.

Thực thi một thủ tục độc lập

Tuyệt vời! Chúng ta đã tạo ra thủ tục của mình, nhưng làm thế nào để chạy nó? Đó là dễ như bánh:

BEGIN
say_hello;
END;
/

Khi bạn chạy điều này, bạn nên thấy "Hello, World!" được in ra. Chúc mừng! Bạn vừa tạo ra và thực thi thủ tục PL/SQL đầu tiên của mình!

Xóa một thủ tục độc lập

Đôi khi, chúng ta cần dọn dẹp. Nếu bạn muốn xóa một thủ tục, điều này rất đơn giản:

DROP PROCEDURE say_hello;

Lệnh này sẽ xóa thủ tục say_hello của chúng ta. Hãy cẩn thận với quyền lực này - với quyền lực lớn, có trách nhiệm lớn!

Chế độ tham số trong các chương trình con PL/SQL

Bây giờ, hãy làm cho thủ tục của chúng ta linh hoạt hơn bằng cách thêm tham số. Trong PL/SQL, các tham số có thể có các chế độ khác nhau:

Chế độ Mô tả
IN Truyền giá trị vào thủ tục
OUT Trả về giá trị từ thủ tục
IN OUT Cả truyền giá trị vào và trả về giá trị ra

Hãy tạo một thủ tục với một tham số IN:

CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
/

Bây giờ chúng ta có thể chào đón các người dùng khác nhau:

BEGIN
greet_user('Alice');
greet_user('Bob');
END;
/

Điều này sẽ in ra:

Hello, Alice!
Hello, Bob!

Các phương pháp truyền tham số

Khi gọi thủ tục với các tham số, chúng ta có hai phương pháp chính:

  1. Định dạng vị trí: Chúng ta truyền các tham số theo thứ tự chúng được định nghĩa.
  2. Định dạng tên: Chúng ta chỉ định mỗi giá trị tương ứng với tham số nào.

Hãy xem cả hai phương pháp trong hành động với một thủ tục mới:

CREATE OR REPLACE PROCEDURE calculate_rectangle(
p_length IN NUMBER,
p_width IN NUMBER,
p_area OUT NUMBER,
p_perimeter OUT NUMBER
) IS
BEGIN
p_area := p_length * p_width;
p_perimeter := 2 * (p_length + p_width);
END;
/

Bây giờ, hãy gọi thủ tục này bằng cả hai phương pháp:

DECLARE
v_area NUMBER;
v_perimeter NUMBER;
BEGIN
-- Định dạng vị trí
calculate_rectangle(5, 3, v_area, v_perimeter);
DBMS_OUTPUT.PUT_LINE('Vị trí: Diện tích = ' || v_area || ', Chu vi = ' || v_perimeter);

-- Định dạng tên
calculate_rectangle(p_width => 3, p_length => 5, p_perimeter => v_perimeter, p_area => v_area);
DBMS_OUTPUT.PUT_LINE('Tên: Diện tích = ' || v_area || ', Chu vi = ' || v_perimeter);
END;
/

Cả hai cuộc gọi đều sẽ tạo ra kết quả tương tự:

Vị trí: Diện tích = 15, Chu vi = 16
Tên: Diện tích = 15, Chu vi = 16

Định dạng tên đặc biệt hữu ích khi bạn có nhiều tham số hoặc muốn bỏ qua các tham số tùy chọn.

Và thế là bạn đã có nó, các bạn! Chúng ta đã bao gồm các основы PL/SQL thủ tục, từ tạo ra đến thực thi, và thậm chí đã chạm vào các tham số và cách truyền chúng. Nhớ rằng, thực hành làm cho hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các thủ tục của riêng bạn.

Trước khi chúng ta kết thúc, đây là một câu đùa nhanh: Tại sao quản trị viên cơ sở dữ liệu bỏ vợ mình? Cô ấy có quá nhiều quan điểm và không được chuẩn hóa!

Chúc các bạn lập trình vui vẻ, và hy vọng các thủ tục của bạn luôn thực thi thành công!

Credits: Image by storyset