PL/SQL - Mảng

Xin chào các bạn học lập trình! Hôm nay, chúng ta sẽ cùng nhau khám phá thế giới thú vị của các mảng PL/SQL. Là một giáo viên khoa học máy tính gần gũi, tôi sẽ hướng dẫn các bạn từng bước trong hành trình này. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ cơ bản và dần dần nâng cao. Hãy chuẩn bị vở ghi chép ảo của bạn và cùng bắt đầu nhé!

PL/SQL - Arrays

Mảng là gì trong PL/SQL?

Trước khi chúng ta nhảy vào phần sâu hơn, hãy hiểu về mảng là gì. Hãy tưởng tượng bạn có một đống kẹo, thay vì để chúng rải rác khắp bàn làm việc, bạn quyết định bỏ chúng vào một hộp nhỏ gọn. Hộp đó giống như một mảng - nó là một容器 chứa nhiều mục cùng loại.

Trong PL/SQL, một mảng là một bộ sưu tập các phần tử cùng loại. Nó cho phép bạn lưu trữ và manipulates nhiều giá trị dưới một tên biến duy nhất. Rất tiện lợi, phải không?

Các loại mảng trong PL/SQL

PL/SQL cung cấp ba loại mảng:

  1. Mảng liên hợp (Index-By Tables)
  2. Bảng con (Nested Tables)
  3. Mảng có kích thước thay đổi (VARRAYs)

Hãy tập trung vào VARRAYs trước, vì chúng là điểm khởi đầu tuyệt vời cho người mới bắt đầu.

Tạo một loại Varray

Một VARRAY (Variable-size Array) là một loại mảng trong PL/SQL có giới hạn kích thước tối đa. Nó giống như mua một hộp kẹo có số lượng ngăn cố định - bạn không thể thêm nhiều kẹo hơn số lượng ngăn hộp có thể chứa!

Dưới đây là cách bạn tạo một loại VARRAY:

CREATE OR REPLACE TYPE number_array AS VARRAY(5) OF NUMBER;

Hãy phân tích này:

  • CREATE OR REPLACE TYPE: Điều này告诉 Oracle tạo một loại mới hoặc thay thế một loại hiện có.
  • number_array: Đây là tên chúng ta đang đặt cho loại mới của mình.
  • AS VARRAY(5): Chúng ta đang xác định nó là một VARRAY với tối đa 5 phần tử.
  • OF NUMBER: Mỗi phần tử trong mảng này sẽ là loại dữ liệu NUMBER.

Bây giờ, hãy xem cách chúng ta có thể sử dụng VARRAY này trong một khối PL/SQL:

DECLARE
    my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
    FOR i IN 1..my_numbers.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('Phần tử ' || i || ': ' || my_numbers(i));
    END LOOP;
END;
/

Kết quả:

Phần tử 1: 10
Phần tử 2: 20
Phần tử 3: 30
Phần tử 4: 40
Phần tử 5: 50

Hãy phân tích mã này:

  1. Chúng ta khai báo my_numbers là một VARRAY và khởi tạo nó với 5 số.
  2. Chúng ta sử dụng một vòng lặp FOR để duyệt qua mảng.
  3. my_numbers.COUNT cho chúng ta biết số lượng phần tử trong mảng.
  4. Chúng ta sử dụng my_numbers(i) để truy cập mỗi phần tử và in nó.

Làm việc với VARRAYs

Bây giờ chúng ta đã tạo và khởi tạo một VARRAY, hãy khám phá một số thao tác chúng ta có thể thực hiện trên nó.

Thêm phần tử

Lưu ý rằng chúng ta không thể thêm nhiều phần tử hơn giới hạn kích thước chúng ta đã xác định. Hãy thử thêm một phần tử:

DECLARE
    my_numbers number_array := number_array(10, 20, 30);
BEGIN
    my_numbers.EXTEND;
    my_numbers(4) := 40;

    FOR i IN 1..my_numbers.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('Phần tử ' || i || ': ' || my_numbers(i));
    END LOOP;
END;
/

Kết quả:

Phần tử 1: 10
Phần tử 2: 20
Phần tử 3: 30
Phần tử 4: 40

Ở đây, chúng ta đã sử dụng EXTEND để tăng kích thước của mảng lên 1, sau đó gán giá trị cho phần tử mới.

Xóa phần tử

Chúng ta cũng có thể xóa phần tử từ cuối mảng:

DECLARE
    my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
    my_numbers.TRIM(2);  -- Xóa 2 phần tử cuối

    FOR i IN 1..my_numbers.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('Phần tử ' || i || ': ' || my_numbers(i));
    END LOOP;
END;
/

Kết quả:

Phần tử 1: 10
Phần tử 2: 20
Phần tử 3: 30

Phương thức TRIM xóa các phần tử từ cuối mảng.

Các phương thức phổ biến cho VARRAYs

Dưới đây là bảng các phương thức phổ biến bạn có thể sử dụng với VARRAYs:

Phương thức Mô tả
COUNT Trả về số lượng phần tử trong mảng
FIRST Trả về chỉ số của phần tử đầu tiên
LAST Trả về chỉ số của phần tử cuối cùng
LIMIT Trả về kích thước tối đa của mảng
EXTEND Tăng kích thước của mảng
TRIM Giảm kích thước của mảng
EXISTS Kiểm tra xem phần tử có tồn tại tại chỉ số cụ thể

Ví dụ thực tế: Điểm số học sinh

Hãy áp dụng kiến thức của chúng ta vào một ví dụ thực tế. Hãy tưởng tượng bạn là một giáo viên (như tôi!) và bạn muốn lưu trữ và tính điểm trung bình cho một học sinh:

CREATE OR REPLACE TYPE grade_array AS VARRAY(5) OF NUMBER;

DECLARE
    student_grades grade_array := grade_array(85, 90, 78, 92, 88);
    total_score NUMBER := 0;
    average_score NUMBER;
BEGIN
    -- Tính tổng điểm
    FOR i IN 1..student_grades.COUNT LOOP
        total_score := total_score + student_grades(i);
    END LOOP;

    -- Tính điểm trung bình
    average_score := total_score / student_grades.COUNT;

    DBMS_OUTPUT.PUT_LINE('Điểm trung bình: ' || ROUND(average_score, 2));
END;
/

Kết quả:

Điểm trung bình: 86.6

Ví dụ này cho thấy cách bạn có thể sử dụng một VARRAY để lưu trữ điểm số của một học sinh, sau đó tính và hiển thị điểm trung bình của họ.

Kết luận

Chúc mừng! Bạn đã chính thức bước vào thế giới của các mảng PL/SQL. Chúng ta đã bao gồm các основы của VARRAYs, cách tạo và manipulates chúng, và thậm chí là một ví dụ thực tế. Nhớ rằng, các mảng giống như hộp kẹo - chúng giúp bạn tổ chức và dễ dàng truy cập dữ liệu. Khi bạn tiếp tục hành trình lập trình của mình, bạn sẽ thấy rằng các mảng là công cụ vô cùng hữu ích trong bộ công cụ lập trình của bạn.

Hãy tiếp tục thực hành, giữ vững sự tò mò và đừng ngần ngại thử nghiệm. Trước khi bạn biết, bạn sẽ làm mọi người ngạc nhiên với kỹ năng PL/SQL của mình! (Xin lỗi, tôi không thể không thêm một chút hài hước của giáo viên ở đó.)

Chúc các bạn may mắn, các phù thủy cơ sở dữ liệu tương lai!

Credits: Image by storyset