четверг, 8 декабря 2011 г.

Инициализация коллекций и обращение к ним


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

Кстати, вот самый первый пример — вы знаете, какой смартфон самый лучший? Я вот недавно нашел в интернете на сайте про андроид смартфон на Андроид Samsung Galaxy Tab, он мне очень приглянулся, так что и вы тоже его можете оценить. На этом сайте еще много различных телефонов с андроид, заходите и ищите то, что вам надо.

Ну а я — вернусь к своей статье. До инициализации вложенная коллекция или массив переменной длины пусты (пуста коллекция, а не ее элементы). Для инициализации вложенной коллекции или массива существует конструктор – функция, создается автоматически системой, имя совпадает с именем типа и она строит («конструирует») коллекцию из переданных ей элементов:

DECLARE
TYPE typet IS TABLE OF VARCHAR2(10);
vart typet;
BEGIN
vart := typet('1','2', '3', '4', '5');
END;

В данном случае конструктор имеет имя typet (то есть – такое же имя, как и название объявленного типа данных). В этот конструктор я передаю элементы коллекции (числа от одного до пяти, но – типа varchar2(10)).

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

Если не оговорено другого (то есть – нет ограничения NOT NULL), то можно передавать в конструктор и пустые значения.

Инициализировать коллекции можно и сразу же после ее объявления (в блоке DECLART, а не только после BEGIN). Так даже считается правильнее:

DECLARE
TYPE typet IS TABLE OF VARCHAR2(10);
vart typet := typet('1','2', '3','4','5');
BEGIN
NULL;
END;

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

DECLARE
TYPE typet IS TABLE OF VARCHAR2(10);
vart typet := typet('1','2', '3','4','5');
BEGIN
dbms_output.put_line(vart(3));
END;

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

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

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