- •Лабораторная работа №2
- •Выполнение заданий
- •Большие объекты: blob и clob
- •На основе кода примера создать процедуры для выборки и изменения атрибута нового типа-массива в таблице;
- •Работа с табличным типом:
- •Создание типов: 04_t_org_po.Tps и 05_tt_org_po.Tps;
- •Разработать процедуры по аналогии со следующими:
- •Разработать процедуру для записи и выборки поля;
- •Разработать процедуру, использующую xPath-выражение;
- •Работа с типом xmltype. Примеры -- 06_xmltype.Sql. На основе примеров необходимо:
- •Добавить поле xmltype;
- •Разработать процедуру для генерации xml.
Разработать процедуру для генерации xml.
-- генерация xml
select xmlelement("zakaz", -- корневой элемент
xmlelement("id",id_z), -- вложенные элементы
xmlelement("name", fio_k),
xmlelement("marka", marka),
xmlelement("kod",kod_rab),
xmlelement("karta", number_rem_kart),
xmlelement("data", data_v),
xmlelement("sotr", number_sotr)
) as k_xml
from zakaz_na_rem
Процедура для генерации XML данных о заказах на ремонт по марке автомобиля
create or replace
PROCEDURE XML_Generate(
out_rc out sys_refcursor,
out_res out integer, -- код результата
in_id in zakaz_na_rem.id_z%type, -- вх/вых параметр - идентификатор
in_marka in zakaz_na_rem.marka%TYPE
) IS
BEGIN
out_res:=0; -- 0 - все нормально
IF (in_id IS NULL) and (in_marka IS NULL) THEN
out_res:=1;
ELSE
-- Выборка XML с конвертацией в varchar2
open out_rc for
-- генерация xml
select xmlelement("zakaz", -- корневой элемент
xmlelement("id",id_z), -- вложенные элементы
xmlelement("name", fio_k),
xmlelement("marka", marka),
xmlelement("kod",kod_rab),
xmlelement("karta", number_rem_kart),
xmlelement("data", data_v),
xmlelement("sotr", number_sotr)
) as k_xml
from zakaz_na_rem
where marka like in_marka;
commit;
end if;
END;
Выполнение процедуры и её результат приведены на рисунках ниже:
-- генерация xml
select xmlelement("zakaz", -- корневой элемент
xmlagg( -- агрегирование нескольких записей в один элемент
xmlelement("zak",
xmlelement("id",id_z), -- вложенные элементы
xmlelement("name", fio_k),
xmlelement("marka", marka),
xmlelement("kod",kod_rab),
xmlelement("karta", number_rem_kart),
xmlelement("data", data_v),
xmlelement("sotr", number_sotr)
)
)
)as k_xml
from zakaz_na_rem
Процедура для генерации XML данных о заказах на ремонт по марке автомобиля с агрегированием нескольких записей в один элемент
create or replace PROCEDURE XML_Generate2(
out_rc out sys_refcursor,
out_res out integer, -- код результата
in_id in zakaz_na_rem.id_z%type, -- вх/вых параметр - идентификатор
in_marka in zakaz_na_rem.marka%TYPE
) IS
BEGIN
out_res:=0; -- 0 - все нормально
IF (in_id IS NULL) and (in_marka IS NULL) THEN
out_res:=1;
ELSE
-- Выборка XML с конвертацией в varchar2
open out_rc for
-- генерация xml
select xmlelement("zakaz", -- корневой элемент
xmlagg( -- агрегирование нескольких записей в один элемент
xmlelement("zak",
xmlelement("id",id_z), -- вложенные элементы
xmlelement("name", fio_k),
xmlelement("marka", marka),
xmlelement("kod",kod_rab),
xmlelement("karta", number_rem_kart),
xmlelement("data", data_v),
xmlelement("sotr", number_sotr)
)
)
)as k_xml
from zakaz_na_rem
where marka like in_marka;
commit;
end if;
END;
Выполнение процедуры и её результат приведены на рисунках ниже:
