От методов класса 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;
В примере все рассмотреть не получилось, но – надеюсь, стало понятней. Пробуйте и экспериментируйте у себя за компьютером.
Комментариев нет:
Отправить комментарий