четверг, 5 января 2012 г.

Коллекции. Методы. Часть 3


От методов класса DateTime постепенно я перехожу к методам коллекций в языке PL/SQL (тема тоже интересная и полезная). Правда по много методов рассматривать сразу не получается – описания их довольно большие, так что оставшиеся методы я рассмотрю в этой и следующей статье и перейдем уже к следующей теме.

Правда получилось небольшое недоразумение — я думал, что опубликовал все статьи по данной теме еще в прошлом году. Но — оказывается что осталось еще две статьи (включая эту) по методам коллекций. Так что надо наверстывать упущенное — и публиковать данные статьи, чем я и займусь в ближайшее время. Начну с третьей части статей по методам коллекций.

Сегодня будут рассмотрены следующие методы:

PRIOR
NEXT
EXTEND

PRIOR и NEXT:

Данные методы надо рассматривать вместе, так как они выполняют подобные функции – возвращают предыдущий (PRRIOR) и следующий (NEXT) элементы коллекции. То есть – в данные методы необходимо передать индекс – а они вернут либо предыдущий либо следующие индексы. Если применять методы к ассоциативным массивам – то будут возвращены предыдущие и следующие значения массива:

DECLARE
TYPE tk IS TABLE OF INTEGER;
tv tk := tk(1,3,4,5,6);
BEGIN
dbms_output.put_line(to_char(tv.PRIOR(2))); --1
dbms_output.put_line(to_char(tv.NEXT(2))); --3
tv.DELETE(2);
dbms_output.put_line(to_char(tv.PRIOR(2))); --1
dbms_output.put_line(to_char(tv.NEXT(2))); --3
dbms_output.put_line(to_char(tv.PRIOR(1))); --null
dbms_output.put_line(to_char(tv.NEXT(5))); --null
END;

Как можно увидеть из примера (и это действительно так) методы PRIOR и NEXT игнорирую удаленные элементы – им же не важно значение элемента, они работают с индексами. А если удалить элемент под индексом два – то все-равно будет какой-то элемент с индексом два. Так что следующий и предыдущий индексы (в примере) всегда одни и те же.

Также – если предыдущий или следующий элементы не существуют – то методы возвратят NULL (как в последних строках примера).

EXTEND:

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

EXTEND без параметров – добавляет к коллекции один элемент с неопределенным (NULL) значением;
EXTEND(n) – добавляет к коллекции n элементов с неопределенным значением;
EXTEND(n,i) – добавляет к коллекции n копий i-го элемента;

Методы EXTEND нельзя использовать с ассоциативными массивами, а также – с неинициализированными коллекциями. Также нужно следить за ограничением NOT NULL, которое может налагаться на элементы коллекции (если такое есть – то применять первые две формы метода к выбранной коллекции нельзя).

Добавление новых элементов происходит либо в конец коллекции, либо – на место удаленного элемента, так что надо быть осторожным с данным методом.

DECLARE
TYPE tk IS TABLE OF INTEGER;
tv tk := tk(1,3,4,5,6);
BEGIN
tv.EXTEND;
dbms_output.put_line(tv(6)); --null
tv(6) := 4;
dbms_output.put_line(tv(6)); --4
tv.DELETE(3);
tv.EXTEND;
dbms_output.put_line(tv(2)); --3
END;

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

В следующей статье я рассмотрю оставшиеся два метода и – перейду к записям. А за записями – последуем уже и следующая тема.

Комментариев нет:

Отправить комментарий