Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Коллекции




Записи

Объектные переменные

Объектные переменные содержат описания сложных объектов (структур данных), их атрибутов и методов. Перед объявлением объектной переменной необходимо создать объектный тип:

Create type <имя типа> {is | as} object (<имя атрибута> <тип атрибута>,...)

Для инициализации объекта нужно вызвать его конструктор (имя его совпадает с именем объекта) со списком фактических параметров.

Записью называется группа зависимых элементов (полей).

Запись объявляется в виде:

Type <тип> is record(<имя поля> <тип поля> [[not] null][:=<значение>],...)

Примеры объявления переменных.

/* Subtype Fam is Varchar2(30); --неверное объявление подтипа Fam*/

temp Varchar2(30); Subtype Fam is temp%type --верное объявление подтипа Fam

Type TimeRec is Record (min Integer, hours Integer); --объявление типа-записи

Subtype Time is TimeRec; --основан на типе Record TimeRec

Subtype Fam is sotrudniki.fam%type -основан на типе столбца sotrudniki.fam

Cursor sotr is select * from Sotrudniki --объявление курсора sotr (п. 5.4.7)

Subtype T_Sotr_zap is sotr%rowtype --основан на типе строки курсора sotr

Допускается вложенность записей. Обращение к полю имеет вид: <имя переменной‑записи>.<имя поля>.

Переменным-записям можно присваивать значения:

1) применением оператора присваивания для переменной-записи с той же структурой (названиями и типами полей);

2) выполнением операторов Select или Fetch.

Пример вложенной записи

Declare

type timetyp is record (minute smallint, hour smallint);

type meetingtyp is record -- вложенная запись

(day date, time timetyp, place char(20), purpose char(50));

type partytyp is record (day date, time timetyp, loc char(15));

meeting meetingtyp; seminar meetingtyp; party partytyp;

begin meeting.day:= '26-jun-91'; meeting.time.minute:= 45;

meeting.time.hour:= 10;

end;

Пример формирования временной таблицы (Temp) с фамилиями и окладами высокооплачиваемых инженеров (код должности равен 3).

Declare

Dolgnost_zap Dolgnosti%Rowtype; --запись для строки таблицы Dolgnosti

Cursor sotr is select fam from Sotrudniki where kd=3 --объявление курсора sotr

Sotr_zap sotr%rowtype --запись для строки курсора sotr

Begin

Select * into Dolgnost_zap from Dolgnosti where Dolgnosti.kd=3; --чтение строки

Open sotr; --открытие курсора

Loop --цикл чтения курсора (п. 5.4.7)

Fetch sotr into Sotr_zap; --чтение строки курсора в запись Sotr_zap (п. 5.4.7)

Exit when sotr%notfound; --выход из цикла, если строки курсора закончились

If Sotr_zap.oklad>20000 then --условие проверки оклада

insert into temp Values (Sotr_zap.fam, Dolgnost_zap.nd, Sotr_zap.oklad);--вывод

End if;

End loop;

Close sotr; -закрытие курсора sotr

End;

Коллекция представляет собой упорядоченную группу элементов одного типа. Доступ к элементу осуществляется в виде:

<имя переменой типа коллекции>(<индекс>).

Коллекции бывают типов: вложенные таблицы и varray‑массивы.

Вложенная таблица - это переменная типа Tаble. Ee можно рас­смат­ривать как одномерный массив, элементы которого индексируются пере­мен­ной типа Binary Integer со значениями в пределах от -2147483647 до 2147483647, и память элементу отводится только после присвоения эле­мен­ту значения, т.е. не имеют пустоты внутри, которые появляются после уда­ле­ния элементов.

Varray ‑массив является обычным массивом.

Объявление коллекций имеет вид:

Type <имя таблицы> is table of <тип элемента> [not null];--обычная таблица

Type <имя таблицы> is table of <тип элемента> [not null]--индексированная

Index by binary_integer; --таблица

Type <имя таблицы> is varray (<число элементов>)

of <тип элемента>[not null]; --массив

Пример объявления и использования массива типа Table.

Declare

Type mfam_type is Table Of Varchar(40) Index By Binary_Integer;

mfam mfam_type; i Binary_Integer:=1;

begin

mfam(0):=’Иванов’; mfam(i):=’Сидоров’;mfam(2):=’Петров’;

Пример создания объектов (п. 5.4.2.2).

Create type tdeti as table of varchar2(10); --вложенная таблица с именами детей

Create type sotrudnik as object (tn integer(4), fam varchar2, deti tdeti);

Массив переменных может храниться в базе в виде столбца. Доступ к такому элементу осуществляется оператором Table().

Для инициализации коллекции используется конструктор вида:

<имя типа коллекции>(<значение>,...)

Пример создания объектов и таблицы поставок товаров со столбцом post_tovari, который является varray‑массивом.

Create type tovar as object (kt number(3), nt varchar2(30), cena number(10,2));

Create type mtovar as varray(100) of tovar;

Create table tabtavari (kp number(3), post_tovari mtovar);

Insert into tabtavari values(1, ‘Уралмаш’, --ввод значений в таблицу

mtovar(tovar(1,’Буровая,1000000’),tovar(2,’Экскаватор’,2000000)));

Таблицы имеют методы:

Exists(n) - наличие/отсутствие (True/False) эле­мента под номером n.

Count ‑ число элементов (hfam=fams.count).

Limit ‑ максимально допустимое число элементов в varray‑массиве.

First/Last ‑ номер первого/последнего элемента.

Prior(n)/Next(n) ‑ номер преды­ду­щего/следующего элемента после про­пус­ка n элементов.

Extend([k[,n]]) ‑ добавляется k (один элемент, если k отсутствует) копий элемента (или Null, если n не указан) под номером n.

Trim([n]) ‑ удаление последних n (1) элементов.

Delete([n[,k]]) ‑ удаление группы элементов под номерами от n до k (n) или всех элементов, если n и k не указаны соответственно.




Поделиться с друзьями:


Дата добавления: 2014-12-10; Просмотров: 394; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.