
- •Лабораторная работа №2
- •Выполнение заданий
- •Большие объекты: blob и clob
- •На основе кода примера создать процедуры для выборки и изменения атрибута нового типа-массива в таблице;
- •Работа с табличным типом:
- •Создание типов: 04_t_org_po.Tps и 05_tt_org_po.Tps;
- •Разработать процедуры по аналогии со следующими:
- •Работа с типом xmltype. Примеры -- 06_xmltype.Sql. На основе примеров необходимо:
- •Добавить поле xmltype;
- •Разработать процедуру для записи и выборки поля;
- •Разработать процедуру, использующую xPath-выражение;
- •Разработать процедуру для генерации xml.
Работа с типом xmltype. Примеры -- 06_xmltype.Sql. На основе примеров необходимо:
Добавить поле xmltype;
-- Добавление атрибута типа XMLTYPE
alter table zakaz_na_rem add klient_XML XMLTYPE;
-- Add comments to the columns
comment on column zakaz_na_rem.klient_XML
is 'XML-данные о заказчике';
Разработать процедуру для записи и выборки поля;
-- Заполнение значения типа XMLTYPE
update zakaz_na_rem set klient_XML = xmltype(
'<с>
<name>Кузьмин</name>
<marka>BMW</marka>
</с>'
) where id_z = 26;
commit;
Процедура для записи в XML ФИО и марка автомобиля заказчиков
create or replace
PROCEDURE XML_insert(
in_id in zakaz_na_rem.id_z%type, -- вх/вых параметр - идентификатор
in_name in zakaz_na_rem.fio_k%TYPE,
in_marka in zakaz_na_rem.marka%type
) IS
BEGIN
-- Заполнение значения типа XMLTYPE
update zakaz_na_rem set klient_xml = xmltype(
'<c>
<name>'||in_name||'</name>
<marka>'||in_marka||'</marka>
</c>'
)
where id_z = in_id or in_id is null
and (fio_k = in_name or in_name is null);
commit;
END;
Выполнение процедуры и её результат приведены на рисунках ниже:
-- Выборка XML с конвертацией в varchar2
select z.klient_xml.getstringval() from zakaz_na_rem z where z.id_z = 27;
Процедура для выборки XML для заказчика
create or replace
PROCEDURE XML_select(
out_rc out sys_refcursor,
out_res out integer, -- код результата
in_id in zakaz_na_rem.id_z%type, -- вх/вых параметр - идентификатор
in_name in zakaz_na_rem.fio_k%TYPE
) IS
BEGIN
out_res:=0; -- 0 - все нормально
IF (in_id IS NULL) and (in_name IS NULL) THEN
out_res:=1;
ELSE
-- Выборка XML с конвертацией в varchar2
open out_rc for
select z.klient_xml.getstringval() from zakaz_na_rem z
where z.id_z = in_id or in_id is null
and ( z.fio_k = in_name or in_name is null);
commit;
end if;
END;
Выполнение процедуры и её результат приведены на рисунках ниже:
Разработать процедуру, использующую xPath-выражение;
-- Выборка с использованием функции extractValue для получения значения по XPath-выражению
select extractValue(klient_xml,'/c/name') as c_name,
extractValue(klient_xml,'/c/marka') as c_marka
from zakaz_na_rem where zakaz_na_rem.id_z = 27;
Процедура для выборки XML с использованием функции extractValue для получения значения по XPath-выражению
create or replace
PROCEDURE XML_select_XPath(
out_rc out sys_refcursor,
out_res out integer, -- код результата
in_id in zakaz_na_rem.id_z%type, -- вх/вых параметр - идентификатор
in_name in zakaz_na_rem.fio_k%TYPE
) IS
BEGIN
out_res:=0; -- 0 - все нормально
IF (in_id IS NULL) and (in_name IS NULL) THEN
out_res:=1;
ELSE
-- Выборка XML с конвертацией в varchar2
open out_rc for
select extractValue(klient_xml,'/c/name') as c_name,
extractValue(klient_xml,'/c/marka') as c_marka
from zakaz_na_rem z
where z.id_z = in_id or in_id is null
and ( z.fio_k = in_name or in_name is null);
commit;
end if;
END;
Выполнение процедуры и её результат приведены на рисунках ниже: