PL/SQL - Biến: 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 biến 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à hướng dẫn viê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ể xử lý các biến như một chuyên gia!

PL/SQL - Variables

什么是变量?

Trước khi chúng ta bắt đầu, hãy hiểu biến là gì. Hãy tưởng tượng biến như những hộp nhỏ trong bộ nhớ của máy tính của bạn để lưu trữ dữ liệu. Giống như bạn có thể sử dụng các hộp khác nhau để lưu trữ các loại vật phẩm khác nhau trong phòng của bạn, chúng ta sử dụng các biến để lưu trữ các loại dữ liệu khác nhau trong chương trình của mình.

Khai báo Biến trong PL/SQL

Trong PL/SQL, việc khai báo một biến giống như bạn đang giới thiệu bản thân mình với người mới. Bạn nói với chương trình, "Hey, tôi ở đây, và đây là những gì tôi có thể giữ!"

Cú pháp Cơ bản

Cú pháp cơ bản để khai báo một biến trong PL/SQL là:

ten_biến kiểu_dữ_liệu;

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

  • ten_biến là tên bạn chọn cho biến của mình
  • kiểu_dữ_liệu là loại dữ liệu mà biến có thể giữ

Ví dụ

DECLARE
my_name VARCHAR2(50);
my_age NUMBER;
is_student BOOLEAN;
BEGIN
-- Mã của bạn ở đây
END;

Trong ví dụ này:

  • my_name có thể giữ lên đến 50 ký tự
  • my_age có thể giữ một số
  • is_student có thể là TRUE hoặc FALSE

Nhớ rằng, trong PL/SQL, chúng ta khai báo biến trong phần DECLARE, trước câu lệnh BEGIN.

Các Kiểu Dữ Liệu Thường Gặp

Dưới đây là bảng các kiểu dữ liệu phổ biến bạn sẽ gặp:

Kiểu Dữ Liệu Mô tả Ví dụ
VARCHAR2 Chuỗi ký tự có độ dài thay đổi 'Hello, World!'
NUMBER Giá trị số học 42, 3.14
DATE Giá trị ngày và giờ '01-JAN-2023'
BOOLEAN Giá trị logic (TRUE/FALSE) TRUE

Khởi tạo Biến trong PL/SQL

Bây giờ chúng ta đã khai báo các biến của mình, hãy cho chúng một số giá trị! Quá trình này được gọi là khởi tạo.

Khởi tạo Cơ bản

Bạn có thể khởi tạo một biến ngay khi bạn khai báo nó:

DECLARE
greeting VARCHAR2(20) := 'Hello, PL/SQL!';
lucky_number NUMBER := 7;
BEGIN
DBMS_OUTPUT.PUT_LINE(greeting);
DBMS_OUTPUT.PUT_LINE('My lucky number is: ' || lucky_number);
END;

Trong ví dụ này, chúng ta đang chào mừng PL/SQL và chia sẻ số may mắn của mình. := là toán tử gán trong PL/SQL.

Khởi tạo với NULL

Đôi khi, bạn có thể muốn khai báo một biến nhưng không đặt giá trị cho nó ngay lập tức. Trong trường hợp đó, bạn có thể sử dụng NULL:

DECLARE
user_input VARCHAR2(100) := NULL;
BEGIN
-- Chúng ta sẽ lấy đầu vào của người dùng sau
END;

Phạm vi Biến trong PL/SQL

Phạm vi biến giống như khu vực lân cận của biến - nó xác định nơi biến có thể được nhìn thấy và sử dụng.

Biến Cục bộ

Các biến được khai báo trong một khối là cục bộ cho khối đó. Chúng không thể được nhìn thấy bên ngoài khối.

DECLARE
outer_variable VARCHAR2(20) := 'I''m outside!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);

DECLARE
inner_variable VARCHAR2(20) := 'I''m inside!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);  -- Điều này hoạt động
DBMS_OUTPUT.PUT_LINE(inner_variable);  -- Điều này cũng hoạt động
END;

DBMS_OUTPUT.PUT_LINE(outer_variable);  -- Điều này hoạt động
-- DBMS_OUTPUT.PUT_LINE(inner_variable);  -- Điều này sẽ gây ra lỗi
END;

Trong ví dụ này, inner_variable giống như một người bạn nhút nhát chỉ xuất hiện trong bữa tiệc nội bộ. Khối ngoài không thể nhìn thấy anh ta!

Biến Toàn cục

Nếu bạn muốn một biến có thể nhìn thấy ở mọi nơi trong chương trình của bạn, bạn có thể khai báo nó trong khối ngoài cùng.

DECLARE
global_var NUMBER := 100;

PROCEDURE print_global IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Global variable value: ' || global_var);
END;

BEGIN
print_global;
global_var := global_var + 50;
print_global;
END;

Ở đây, global_var giống như một đứa trẻ nổi tiếng - ai cũng biết và có thể tương tác với nó!

Gán Kết quả Truy vấn SQL cho Biến PL/SQL

Một trong những điều tuyệt vời nhất về PL/SQL là cách nó tích hợp liền mạch với SQL. Bạn có thể sử dụng các truy vấn SQL để gán giá trị cho các biến PL/SQL của mình!

Truy vấn Đơn Hàng

DECLARE
employee_name VARCHAR2(100);
employee_salary NUMBER;
BEGIN
SELECT first_name || ' ' || last_name, salary
INTO employee_name, employee_salary
FROM employees
WHERE employee_id = 100;

DBMS_OUTPUT.PUT_LINE('Employee: ' || employee_name);
DBMS_OUTPUT.PUT_LINE('Salary: $' || employee_salary);
END;

Trong ví dụ này, chúng ta đang lấy tên và lương của một nhân viên từ bảng employees và lưu chúng vào các biến PL/SQL của mình.

Truy vấn Nhiều Hàng

Đối với nhiều hàng, chúng ta cần sử dụng con trỏ hoặc bulk collect. Dưới đây là ví dụ với bulk collect:

DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(100);
employee_names name_table_type;
BEGIN
SELECT first_name || ' ' || last_name
BULK COLLECT INTO employee_names
FROM employees
WHERE department_id = 60;

FOR i IN 1..employee_names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Employee ' || i || ': ' || employee_names(i));
END LOOP;
END;

Script này lấy tất cả tên nhân viên từ phòng ban 60 và lưu chúng vào một bảng PL/SQL. Chúng ta sau đó vòng lặp qua bảng này để in mỗi tên.

Và thế là xong, các bạn! Chúng ta đã bao gồm các khái niệm cơ bản về biến PL/SQL, từ khai báo đến khởi tạo, phạm vi và thậm chí là cách điền dữ liệu từ kết quả truy vấn SQL. Nhớ rằng, thực hành là cách tốt nhất để hoàn thiện, vì vậy đừng ngần ngại thử nghiệm với các khái niệm này.

Trước khi tôi rời đi, đây là một câu đùa lập trình viên cho bạn: Tại sao lập trình viên bỏ việc? Vì anh ấy không nhận được mảng (a raise)! ?

Chúc các bạn lập trình vui vẻ, và mong rằng các biến của bạn luôn hành xử tốt!

Credits: Image by storyset