Язык PL/SQL. Иван Сергеевич Задворьев
Чтение книги онлайн.

Читать онлайн книгу Язык PL/SQL - Иван Сергеевич Задворьев страница 13

СКАЧАТЬ (50000 руб.)

      старший инженер (60000 руб.)

      PL/SQL procedure successfully completed.

      Таблицы PL/SQL являются разреженными. Чтобы подчеркнуть это, в примере выше специально использованы случайно выбранные индексы 9 и 267, а не 1 и 2. Для перебора таблицы PL/SQL использованы ее встроенные методы FIRST и NEXT.

      Коллекции PL/SQL имеют восемь встроенных методов.

      Таблица 1. Встроенные методы коллекций PL/SQL.

      Метод коллекции

      Описание метода

      COUNT (функция)

      возвращает текущее число элементов в коллекции

      DELETE (процедура)

      удаляет из коллекции один или несколько элементов

      EXISTS (функция)

      определяет, существует ли в коллекции заданный элемент

      EXTEND (процедура)

      увеличивает количество элементов во вложенной таблице или массиве переменной длины

      FIRST, LAST (функции)

      возвращают индексы первого (FIRST) и последнего (LAST) элемента в коллекции

      LIMIT (функция)

      возвращает максимальное количество элементов в массиве переменной длины

      PRIOR, NEXT (функции)

      возвращают индексы элементов, предшествующих заданному (PRIOR) и следующему за ним (NEXT).

      TRIM (процедура)

      удаляет элементы, начиная с конца коллекции

      Рекомендуется перебор элементов коллекций осуществлять с помощью методов FIRST и NEXT, а не с помощью циклов со счетчиком FOR, исходя из ожидаемой плотности коллекции. Цикл FOR перебирает весь заданный диапазон индексов подряд, что может привести к ошибке – обращению к отсутствующему элементу. Метод NEXT перемещается по индексам только «живых» элементов и ошибок из-за пропусков в нумерации не будет.

      Индексы-строки таблиц PL/SQL

      В версии Oracle 9i появилась возможность использовать для индексирования таблиц PL/SQL символьные строки. Это очень удобно, например, для работы со справочниками, в которых и коды и термины являются строками.

      Рассмотрим пример.

      SQL> DECLARE

      2 TYPE t_tab IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(2);

      3 l_tab t_tab;

      4 l_code varchar2(3) := 'MD';

      5 BEGIN

      6 – заполняем таблицу PL/SQL

      7 l_tab('UA') := 'Украина';

      8 l_tab('MD') := 'Молдавия';

      9 – работаем с таблицей PL/SQL

      10 l_code := 'MD'

      11 DBMS_OUTPUT.PUT_LINE('1) Термин для '||l_code||' – '||l_tab(l_code));

      12 l_code := 'UA'

      13 IF l_tab.EXISTS('UA') THEN

      14 DBMS_OUTPUT.PUT_LINE('2) Код '||l_code||' есть в справочнике');

      15 END IF;

      16 END;

      17 /

      1) Термин для MD – Молдавия

      2) Код UA есть в справочнике

      PL/SQL procedure successfully completed.

      Массивы переменной длины и вложенные таблицы

      Типы данных на основе вложенных таблиц и массивов переменной длины в основном создаются как объекты баз данных и используются в объектно-реляционных расширениях Oracle. Соответственно, для работы со считываемыми из баз данных массивами и вложенными таблицами в программах PL/SQL следует использовать переменные таких же типов данных.

      Рассмотрим объектные расширения Oracle и работу с ними в PL/SQL на следующем примере.

      Пусть СКАЧАТЬ