Использование пакета DBMS_XMLGEN Печать E-mail
Рейтинг: / 7
ХудшаяЛучшая 

Использование пакета DBMS_XMLGEN

 пакет XML_GEN используется в oracle 11 g, звызов в прошлых версиях ORCALE sys.xml_gen

 применение пакета XML_GEN

 XML_GEN используется для преобразования результатов SQL запроса в XML формат

 и вохвращает результат как CLOB

 подготовим тестовый запрос

 количество обьектов заданного типа в схеме sys

select count(ao.OBJECT_TYPE) countOBject, ao.OBJECT_TYPE OT , max(ao.CREATED) maxdtcr

from all_objects ao where ao.OWNER = 'SYS' group by OBJECT_TYPE order by OBJECT_TYPE

 

 Функция newContext

 создает новый контекст для выражения sql

 пример работы

DECLARE

 ctx    dbms_xmlgen.ctxHandle;

 xml    CLOB;

BEGIN

  ctx := dbms_xmlgen.newContext('select sysdate date1 from dual');

  dbms_xmlgen.setRowTag(ctx, 'daterow');

  xml := dbms_xmlgen.getXML(ctx);

  dbms_output.put_line(xml);

  dbms_xmlgen.closeContext(ctx);

END;

 

 Функция closeContext

 создает новый контекст для выражения sql

 пример работы

DECLARE

 ctx    dbms_xmlgen.ctxHandle;

 xml    CLOB;

BEGIN

  ctx := dbms_xmlgen.newContext('select sysdate date1 from dual');

  dbms_xmlgen.setRowTag(ctx, 'daterow');

  xml := dbms_xmlgen.getXML(ctx);

  dbms_output.put_line(xml);

  dbms_xmlgen.closeContext(ctx);

END;

 

 

 функция GetsXML

 возвращает документ XML по запросу, переданному в функцию в виде тестового праметра

 данные возвращаются, а формате clob

 пример работы

select DBMS_XMLGEN.getxml ('select sysdate datet from dual ') myxml from dual

---<?xml version="1.0"?>

--<ROWSET>

-- <ROW>

--  <DATET>07.09.12</DATET>

-- </ROW>

--</ROWSET>

 

select DBMS_XMLGEN.getxml (q'[select count(ao.OBJECT_TYPE) countOBject, ao.OBJECT_TYPE OT , max(ao.CREATED) maxdtcr

  from all_objects ao where owner='SYS' group by OBJECT_TYPE order by OBJECT_TYPE]') myxml

from dual

 обратите внимание на волшебный оператор q - оператор экоранирования кавычек

-- <?xml version="1.0"?>

--<ROWSET>

-- <ROW>

--  <COUNTOBJECT>10</COUNTOBJECT>

--  <OT>CLUSTER</OT>

--  <MAXDTCR>10.11.09</MAXDTCR>

-- </ROW>

-- <ROW>

--  <COUNTOBJECT>2</COUNTOBJECT>

--  <OT>CONSUMER GROUP</OT>

--  <MAXDTCR>10.11.09</MAXDTCR>

-- </ROW>

-- <ROW>

--.........

 

getXMLType Функция

 Gets the XML document

 возвращает документ XML по запросу

 данные возвращаются в формате clob

 пример работы

select DBMS_XMLGEN.getxmltype ('select sysdate datet from dual ') myxml from dual

---<?xml version="1.0"?>

--<ROWSET>

-- <ROW>

--  <DATET>07.09.12</DATET>

-- </ROW>

--</ROWSET>

select DBMS_XMLGEN.getxmltype (q'[select count(ao.OBJECT_TYPE) countOBject, ao.OBJECT_TYPE OT , max(ao.CREATED) maxdtcr

  from all_objects ao where owner='SYS' group by OBJECT_TYPE order by OBJECT_TYPE]') myxml

from dual

-- <?xml version="1.0"?>

--<ROWSET>

-- <ROW>

--  <COUNTOBJECT>10</COUNTOBJECT>

--  <OT>CLUSTER</OT>

--  <MAXDTCR>10.11.09</MAXDTCR>

-- </ROW>

-- <ROW>

--  <COUNTOBJECT>2</COUNTOBJECT>

--  <OT>CONSUMER GROUP</OT>

--  <MAXDTCR>10.11.09</MAXDTCR>

-- </ROW>

-- <ROW>

--.........

 

-- работа с контекстом

-- в функции getxmltype так же можно передавать контекс sql запрос

-- пример работы с конекстом устройства

DECLARE

 ctx    dbms_xmlgen.ctxHandle;

 xml    CLOB;

BEGIN

  ctx := dbms_xmlgen.newContext('select sysdate date1 from dual');

  xml := dbms_xmlgen.getXML(ctx);

  dbms_output.put_line(xml);

  dbms_xmlgen.closeContext(ctx);

END;

-- результат

--<?xml version="1.0"?>

--<ROWSET>

-- <ROW>

--  <DATE1>07.09.12</DATE1>

-- </ROW>

--</ROWSET>

 

Функция setRowSetTag

 устанавливает наименование в XML блока результата

 пример работы

DECLARE

 ctx    dbms_xmlgen.ctxHandle;

 xml    CLOB;

BEGIN

  ctx := dbms_xmlgen.newContext('select sysdate date1 from dual');

  dbms_xmlgen.setRowSetTag(ctx, 'daterow');

  xml := dbms_xmlgen.getXML(ctx);

  dbms_output.put_line(xml);

  dbms_xmlgen.closeContext(ctx);

END;

-- результат

--<?xml version="1.0"?>

--<daterow>

-- <ROW>

--  <DATE1>07.09.12</DATE1>

-- </ROW>

--</daterow>

 

setRowTag Функция

 устанавляивает наименование в XML элемент результата ,

 то есть возникает дополнительный xml блок для каждого элемента строки

 пример работы

DECLARE

 ctx    dbms_xmlgen.ctxHandle;

 xml    CLOB;

BEGIN

  ctx := dbms_xmlgen.newContext('select sysdate date1 from dual');

  dbms_xmlgen.setRowTag(ctx, 'daterow');

  xml := dbms_xmlgen.getXML(ctx);

  dbms_output.put_line(xml);

  dbms_xmlgen.closeContext(ctx);

END;

--<?xml version="1.0"?>

--<ROWSET>

-- <daterow>

--  <DATE1>07.09.12</DATE1>

-- </daterow>

---</ROWSET>

 

 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:


Защитный код
Обновить

« Пред.   След. »