PL/SQL - Массивы

Привет,野心勃勃的程序设计者们! Сегодня мы окунемся в захватывающий мир массивов PL/SQL. Как ваш доброжелательный соседский учитель информатики, я здесь, чтобы провести вас через это путешествие шаг за шагом. Не волнуйтесь, если вы новички в программировании - мы начнем с основ и будем двигаться вверх. Так что возьмите ваши виртуальные блокноты, и давайте начнем!

PL/SQL - Arrays

Что такое массивы в PL/SQL?

Прежде чем мы полезем в深海, давайте поймем, что такое массивы. Представьте, что у вас куча конфет, и вместо того чтобы оставлять их разбросанными по всему вашему столу, вы решили положить их в аккуратную коробочку. Эта коробочка как массив - это контейнер, который хранит несколько элементов одного типа.

В PL/SQL массив - это коллекция элементов одного и того же типа данных. Он позволяет вам хранить и манипулировать несколькими значениями под одним именем переменной. Pretty handy, right?

Типы массивов в PL/SQL

PL/SQL предлагает три типа массивов:

  1. Ассоциативные массивы (Таблицы с индексом)
  2. Вложенные таблицы
  3. Массивы переменного размера (VARRAYs)

Давайте сосредоточимся на VARRAYs для начала, так как это отличная отправная точка для новичков.

Создание типа Varray

VARRAY (Массив переменного размера) - это тип массива в PL/SQL, который имеет ограничение максимального размера. Это как купить коробку конфет с фиксированным количеством ячеек - вы не можете добавить больше конфет, чем может вместить коробка!

Вот как вы создаете тип VARRAY:

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

Давайте разберем это:

  • CREATE OR REPLACE TYPE: Это говорит Oracle создать новый тип или заменить существующий.
  • number_array: Это имя, которое мы даем нашему новому типу.
  • AS VARRAY(5): Мы определяем его как VARRAY с максимальным количеством элементов 5.
  • OF NUMBER: Каждый элемент в этом массиве будет типа NUMBER.

Теперь давайте посмотрим, как мы можем использовать этот VARRAY в блоке 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('Элемент ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/

Результат:

Элемент 1: 10
Элемент 2: 20
Элемент 3: 30
Элемент 4: 40
Элемент 5: 50

Давайте разложим этот код:

  1. Мы объявляем my_numbers как наш VARRAY и инициализируем его с 5 числами.
  2. Мы используем цикл FOR для прохождения по массиву.
  3. my_numbers.COUNT дает нам количество элементов в массиве.
  4. Мы используем my_numbers(i) для доступа к каждому элементу и его вывода.

Работа с VARRAYs

Теперь, когда мы создали и инициализировали VARRAY, давайте рассмотрим некоторые операции, которые мы можем выполнять на нем.

Добавление элементов

помните, что мы не можем добавить больше элементов, чем максимальный размер, который мы определили. Давайте попробуем добавить элемент:

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('Элемент ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/

Результат:

Элемент 1: 10
Элемент 2: 20
Элемент 3: 30
Элемент 4: 40

Здесь мы использовали EXTEND, чтобы увеличить размер массива на 1, а затем присвоили значение новому элементу.

Удаление элементов

Мы также можем удалить элементы из конца массива:

DECLARE
my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
my_numbers.TRIM(2);  -- Удалить последние 2 элемента

FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Элемент ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/

Результат:

Элемент 1: 10
Элемент 2: 20
Элемент 3: 30

Метод TRIM удаляет элементы с конца массива.

Общие методы для VARRAYs

Вот таблица общих методов, которые вы можете использовать с VARRAYs:

Метод Описание
COUNT Возвращает количество элементов в массиве
FIRST Возвращает индекс первого элемента
LAST Возвращает индекс последнего элемента
LIMIT Возвращает максимальный размер массива
EXTEND Увеличивает размер массива
TRIM Уменьшает размер массива
EXISTS Проверяет, существует ли элемент в конкретном индексе

Практический пример: Оценки студента

Давайте применяем наши знания к prakticheskomu primeryu. Представьте, что выучитель (как я!), и вы хотите хранить и вычислять средний балл для учащегося:

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
-- Calculate total score
FOR i IN 1..student_grades.COUNT LOOP
total_score := total_score + student_grades(i);
END LOOP;

-- Calculate average
average_score := total_score / student_grades.COUNT;

DBMS_OUTPUT.PUT_LINE('Средний балл: ' || ROUND(average_score, 2));
END;
/

Результат:

Средний балл: 86.6

Этот пример показывает, как вы можете использовать VARRAY для хранения оценок учащегося, а затем вычислять и отображать их средний балл.

Заключение

Поздравляю! Вы только что сделали свои первые шаги в мир массивов PL/SQL. Мы рассмотрели основы VARRAYs, как их создавать и манипулировать ими, и даже применили их на практике. Помните, что массивы как коробки для конфет - они держат ваши данные организованными и легкодоступными. По мере вашего продвижения в программировании, вы найдете массивы incredibly useful tools in your coding toolkit.

Продолжайте практиковаться, stay curious, и не бойтесь экспериментировать. Before you know it, you'll be array-zing everyone with your PL/SQL skills! (Sorry, I couldn't resist a little teacher humor there.)

Happy coding, future database wizards!

Credits: Image by storyset