Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет 2 лаба.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.24 Mб
Скачать
  1. Работа с типом xmltype. Примеры -- 06_xmltype.Sql. На основе примеров необходимо:

    1. Добавить поле 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-данные о заказчике';

    1. Разработать процедуру для записи и выборки поля;

-- Заполнение значения типа 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;

Выполнение процедуры и её результат приведены на рисунках ниже:

    1. Разработать процедуру, использующую 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;

Выполнение процедуры и её результат приведены на рисунках ниже: