КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |