| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |
>>-XMLELEMENT--(--NAME--имя-элемента---------------------------->
>--+-------------------------------------+---------------------->
'-,--объявление-пространства имен-xml-'
>--+--------------------------+--------------------------------->
'-,--функция-XMLATTRIBUTES-'
>--+---------------------------------------+-------------------->
| .-----------------------------------. |
| V | |
'---,--выражение-содержимого-элемента-+-'
>--+------------------------------------------------------------+-->
| .-------------------------------------------. |
| (1) V .-EMPTY ON NULL-. (2) (3) | |
'-OPTION---------+-+-NULL ON NULL--+----------------+------+-'
| .-USING-. |
| .-XMLBINARY--+-------+--BASE64-. |
| | .-USING-. | |
'-+-XMLBINARY--+-------+--HEX----+-'
>--)-----------------------------------------------------------><
Примечания:
Схема - SYSIBM. Имя функции не может быть задано как квалифицированное имя.
Функция XMLELEMENT Возвращает XML-значение, которое является элементным узлом XQuery.
NAME имя-элемента
Задает имя элемента XML. Имя является идентификатором SQL, который должен быть в форме квалифицированного имени XML или QName (SQLSTATE 42634). См. подробнее о допустимых именах в спецификациях пространства имен W3C. Если имя квалифицировано, то префикс пространства имен должен быть объявлен в области видимости (SQLSTATE 42635).
объявление-пространства имен-xml
Задает объявления пространств имен XML, которые являются результатом функции XMLNAMESPACES. Пространства имен, которые объявлены, находятся в области видимости функции XMLELEMENT. Пространства имен применяются ко всем вложенным функциям XML внутри функции XMLELEMENT, даже если они появляются внутри другого подзапроса.Если объявление-пространства имен-xml не задано, объявления пространств имен с конструируемым элементом не связываются.
функция-XMLATTRIBUTES
Задает атрибуты XML для элемента. Атрибуты являются результатом функции XMLATTRIBUTES.
выражение-содержимого-элемента
Содержимое генерируемого элементного узла XML задается выражением или списком выраженией. Тип данных выражения-содержимого-элемента не может быть структурированным. Выражение может быть любым SQL-выражением.OPTIONЕсли выражение-содержимого-элемента не задается, в качестве содержимого элемента используется пустая строка и OPTION NULL ON NULL или EMPTY ON NULL не должны задаваться.
Задает дополнительные опции для конструирования элемента XML. Если фраза OPTION не задана, по умолчанию принимается EMPTY ON NULL XMLBINARY USING BASE64. Эта фраза не влияет на вложенные вызовы XMLELEMENT, заданные в выражении-содержимого-элемента.EMPTY ON NULL или NULL ON NULL
Задает, должно возвращаться значение null или пустой элемент, если - значение каждого выражения-содержимого-элемента - значение null. Эта опция влияет только на значения null в содержимом элемента, а не в значениях атрибутов. По умолчанию принимается EMPTY ON NULL.EMPTY ON NULL
Если значение каждого выражения-содержимого-элемента - null, возвращается пустой элемент.NULL ON NULL
Если значение каждого выражения-содержимого-элемента - null, возвращается значение null.XMLBINARY USING BASE64 или XMLBINARY USING HEX
Задает подразумеваемую кодировку двоичных входных данных, символьных строк с атрибутом FOR BIT DATA или различимых типов, базирующихся на этих типах. Кодировка применяется к содержимому элемента или к значениям атрибутов. По умолчанию принимается XMLBINARY USING BASE64.XMLBINARY USING BASE64
Задает подразумеваемую кодировку base64, как определено для типа XML-схемы xs:base64Binary. Кодировка base64 использует 65-символьное подмножество US-ASCII (10 цифр, 26 символов нижнего регистра, 26 символов верхнего регистра, '+' и '/') для представления каждых шести бит двоичных или битовых данных. Эти символы выбраны так, что они универсально представимы. При использовании этого метода размер кодированных данных на 33 процента больше, чем исходных двоичных или битовых данных.XMLBINARY USING HEX
Задает подразумеваемую кодировку в 16-ричных символах, как определено для типа XML-схемы xs:hexBinary. 16-ричнвя кодировка представляет каждый байт (8 бит) двумя 16-ричными цифрами. При использовании этого метода размер кодированных данных вдвое больше, чем исходных двоичных или битовых данных.
Эта функция принимает имя элемента и - необязательно - коллекцию объявлений пространств имен, необязательно - коллекцию атрибутов и ноль или более аргументов, которые составляют содержимое элемента XML. Результатом является XML-последовательность, содержащая узел элемента XML или значение null.
Тип данных результата - XML. Если любой из аргументов выражения-содержимого-элемента может быть null, результат может быть null; если все значения аргументов выражения-содержимого-элемента - null и работает опция NULL ON NULL, результат - значение null.
Примечания:
VALUES XMLELEMENT(
NAME "c", XMLQUERY(
'declare namespace ipo="www.ipo.com"; $m/ipo:a/@ipo:b' PASSING XMLPARSE(
DOCUMENT '<tst:a xmlns:tst="www.ipo.com" tst:b="2"/>'
) AS "m"
)
)
возвращает:
<c xmlns:tst="www.ipo.com" tst:b="2"/>
Второй пример:
VALUES XMLELEMENT(
NAME "tst:c", XMLNAMESPACES(
'www.tst.com' AS "tst"
),
XMLQUERY(
'declare namespace ipo="www.ipo.com"; $m/ipo:a/@ipo:b' PASSING XMLPARSE (
DOCUMENT '<tst:a xmlns:tst="www.ipo.com" tst:b="2"/>'
) AS "m"
)
)
возвращает:
<tst:c xmlns:tst="www.tst.com" xmlns:db2ns-a1="www.ipo.com" db2ns-a1:b="2"/>
Примеры:
SELECT E.FIRSTNME, E.LASTNAME, XMLELEMENT(
NAME "Emp", XMLELEMENT(
NAME "firstname", E.FIRSTNME
),
XMLELEMENT(
NAME "lastname", E.LASTNAME
)
OPTION NULL ON NULL
)
AS "Result"
FROM EMPLOYEE E
WHERE E.EDLEVEL = 12
Этот запрос вырабатывает следующий результат (форматирован для читабельности):
FIRSTNME LASTNAME Emp
JOHN PARKER <Emp><firstname>JOHN</firstname>
<lastname>PARKER</lastname></Emp>
MAUDE SETRIGHT <Emp><firstname>MAUDE</firstname>
<lastname>SETRIGHT</lastname></Emp>
MICHELLE SPRINGER <Emp><firstname>MICHELLE</firstname>
<lastname>SPRINGER</lastname></Emp>
SELECT XMLELEMENT(
NAME "Department", XMLATTRIBUTES(
E.WORKDEPT AS "name"
),
XMLAGG (
XMLELEMENT (
NAME "emp", E.FIRSTNME
)
ORDER BY E.FIRSTNME
)
)
AS "dept_list"
FROM EMPLOYEE E
WHERE E.WORKDEPT IN ('A00', 'B01')
GROUP BY WORKDEPT
Этот запрос вырабатывает следующий результат:
dept_list <Department name="A00"> <emp>CHRISTINE</emp> <emp>SEAN</emp> <emp>VINCENZO</emp> </Department> <Department name="B01"> <emp>MICHAEL</emp> </Department>
| Назад | Оглавление | Вперед |
| Каталог | Индекс раздела |