Учебники

PL / SQL — Массивы

В этой главе мы обсудим массивы в PL / SQL. Язык программирования PL / SQL предоставляет структуру данных, называемую VARRAY , которая может хранить последовательную коллекцию элементов одного типа с фиксированным размером. Varray используется для хранения упорядоченного набора данных, однако часто лучше рассматривать массив как набор переменных одного типа.

Все массивы состоят из смежных областей памяти. Самый низкий адрес соответствует первому элементу, а самый высокий адрес — последнему.

Varrays в PL / SQL

Массив является частью данных типа коллекции и обозначает массивы переменного размера. Мы будем изучать другие типы коллекций в следующей главе «Коллекции PL / SQL» .

Каждый элемент в массиве имеет индекс, связанный с ним. Он также имеет максимальный размер, который можно динамически изменять.

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

Тип varray создается с помощью оператора CREATE TYPE . Вы должны указать максимальный размер и тип элементов, хранящихся в varray.

Основной синтаксис для создания типа VARRAY на уровне схемы —

CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>

Куда,

  • varray_type_name является допустимым именем атрибута,
  • n — количество элементов (максимум) в массиве,
  • element_type — это тип данных элементов массива.

Максимальный размер varray можно изменить с помощью инструкции ALTER TYPE .

Например,

CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10); 
/ 

Type created.

Основной синтаксис для создания типа VARRAY в блоке PL / SQL:

TYPE varray_type_name IS VARRAY(n) of <element_type>

Например —

TYPE namearray IS VARRAY(5) OF VARCHAR2(10); 
Type grades IS VARRAY(5) OF INTEGER;

Давайте теперь потренируемся на нескольких примерах, чтобы понять концепцию —

Пример 1

Следующая программа иллюстрирует использование varrays —

DECLARE 
   type namesarray IS VARRAY(5) OF VARCHAR2(10); 
   type grades IS VARRAY(5) OF INTEGER; 
   names namesarray; 
   marks grades; 
   total integer; 
BEGIN 
   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); 
   marks:= grades(98, 97, 78, 87, 92); 
   total := names.count; 
   dbms_output.put_line('Total '|| total || ' Students'); 
   FOR i in 1 .. total LOOP 
      dbms_output.put_line('Student: ' || names(i) || ' 
      Marks: ' || marks(i)); 
   END LOOP; 
END; 
/

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат —

Total 5 Students 
Student: Kavita  Marks: 98 
Student: Pritam  Marks: 97 
Student: Ayan  Marks: 78 
Student: Rishav  Marks: 87 
Student: Aziz  Marks: 92 

PL/SQL procedure successfully completed. 

Пожалуйста, обратите внимание

  • В среде Oracle начальный индекс для varrays всегда равен 1.

  • Вы можете инициализировать элементы varray, используя метод конструктора типа varray, имя которого совпадает с именем varray.

  • Varrays — это одномерные массивы.

  • Varray автоматически становится NULL, когда он объявлен, и должен быть инициализирован, прежде чем на его элементы можно будет ссылаться.

В среде Oracle начальный индекс для varrays всегда равен 1.

Вы можете инициализировать элементы varray, используя метод конструктора типа varray, имя которого совпадает с именем varray.

Varrays — это одномерные массивы.

Varray автоматически становится NULL, когда он объявлен, и должен быть инициализирован, прежде чем на его элементы можно будет ссылаться.

Пример 2

Элементами varray также может быть% ROWTYPE любой таблицы базы данных или% TYPE любого поля таблицы базы данных. Следующий пример иллюстрирует концепцию.

Мы будем использовать таблицу CUSTOMERS, хранящуюся в нашей базе данных, как —

Select * from customers;  

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | MP        |  4500.00 | 
+----+----------+-----+-----------+----------+ 

В следующем примере используется курсор , который вы подробно изучите в отдельной главе.

DECLARE 
   CURSOR c_customers is 
   SELECT  name FROM customers; 
   type c_list is varray (6) of customers.name%type; 
   name_list c_list := c_list(); 
   counter integer :=0; 
BEGIN 
   FOR n IN c_customers LOOP 
      counter := counter + 1; 
      name_list.extend; 
      name_list(counter)  := n.name; 
      dbms_output.put_line('Customer('||counter ||'):'||name_list(counter)); 
   END LOOP; 
END; 
/ 

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат —