| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |
>>-REC2XML--(--десятичная-константа--,--строка-формата--------------->
.----------------.
V |
>--,-- тег-строки----,--имя-столбца-+--)--------------------><
Схема - SYSIBM.
Функция REC2XML возвращает строку, форматированную тегами XML, содержащую имена и данные столбцов. В базе данных Unicode, если предаваемый аргумент является графической строкой, он перед выполнением функции сначала преобразуется в строку символов.
десятичная-константа
Коэффициент расширения для символов данных столбца. Десятичное значение должно быть больше 0.0 и меньше или равно 6.0. (SQLSTATE 42820).Значение десятичной-константы используется для вычисления длины результата функции. Для каждого столбца с символьным типом данных атрибут длины столбца умножается на этот коэффициент расширения прежде, чем он добавляется к длине результата.
Чтобы задать отсутствие расширения, используйте значение 1.0. Задание значения, меньшего 1.0, уменьшает вычисляемую длину результата. Если реальная длина результирующей строки больше, чем вычисленная длина результата функции, происходит ошибка (SQLSTATE 22001).
строка-формата
Строковая константа, которая задает, какой формат использует функция во время выполнения.Строка-формата чувствительна к регистру, так что для того, чтобы следующие значения распознавались, они должны задаваться в верхнем регистре.
COLATTVAL или COLATTVAL_XML
Эти форматы возвращают строку со столбцами как значениями атрибутов.>>-<-- тег-строки-->-----------------------------------------> .----------------------------------------------------------------------------. V | >----<--column name--=--"имя-столбца"--+->-- значение-в столбце--</column -->-+-+--> '-null="true"--/>----------------------' >--</-- тег-строки-->---------------------------------------><Имена столбцов могут быть, а могут и не быть правильными значениями атрибутов XML, перед включением имени столбца в результирующую строку происходит замена символов.
Значения столбцов могут быть, а могут и не быть правильными именами элементов XML. Если задана строка-формата COLATTVAL, то для имен столбцов, которые не являются правильными именами элементов XML, перед включением значения столбца в результирующую строку происходит замена символов. Если задана строка-формата COLATTVAL_XML, то замена символов не выполняется на значениях столбцов (хотя все еще выполняется на именах столбцов).
тег-строки
Строковая константа, которая задает тег, используемый для каждой строки. Если задана пустая строка, то подразумевается значение 'row'.Если задана строка из одного или более пробелов, но ни открывающий тег-строки, ни закрывающий тег-строки (включая угловые скобки) в результирующей строке не появляются.
имя-столбца
Квалифицированное или неквалифицированное имя столбца таблицы. Столбец может иметь один из следующих типов данных (SQLSTATE 42815):
- числовой (SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE)
- строка символов (CHAR, VARCHAR; строка символов с подтипом BIT DATA не допускается)
- даты-времени (DATE, TIME, TIMESTAMP)
- тип, определенный пользователем, базирующийся на одном из вышеназванных типов
Одно и то же имя столбца не должно задаваться более одного раза (SQLSTATE 42734).
Результатом функции является VARCHAR. Максимальная длина - 32 672 байт (SQLSTATE 54006).
Рассмотрим следующий вызов:
REC2XML (dc, fs, rt, c1, c2, ..., cn)
Если значение "fs" - "COLATTVAL" или "COLATTVAL_XML", то результат такой же, как у выражения:
'<' CONCAT rt CONCAT '>' CONCAT y1 CONCAT y2
CONCAT ... CONCAT yn CONCAT '</' CONCAT rt CONCAT '>'
где yn эквивалентно:
'<column name="' CONCAT xvcn CONCAT vn
а vn эквивалентно:
'">' CONCAT rn CONCAT '</column>'
если столбец не null, и
'" null="true"/>'
если значение в столбце - null.
xvcn эквивалентно строковому представлению столбца с именем cn, где любые символы, появляющиеся в Таблице 130, заменяются на соответствующее представление. Это гарантирует, что результирующая строка будет правильной лексемой значения атрибута или элемента XML.
rn эквивалентно строковому представлению, как показано в Таблице 129.
Таблица129. Результирующая строка значений столбцов
| Тип данных cn | rn |
|---|---|
| CHAR, VARCHAR | Значение является строкой. Если строка-формата не заканчивается символами "_XML", то каждый символ в cn заменяется на соответствующее представление замены из Таблицы 130, как показано. Длина атрибута: dc * длина атрибута cn. |
| SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, DOUBLE | Значение - LTRIM(RTRIM(CHAR(cn))). Длина атрибута - результирующая длина CHAR(cn). Десятичным символом всегда является символ точки ('.'). |
| DATE | Значение - CHAR(cn,ISO). Длина атрибута - результирующая длина CHAR(cn,ISO). |
| TIME | Значение - CHAR(cn,JIS). Длина атрибута - результирующая длина CHAR(cn,JIS). |
| TIMESTAMP | Значение - CHAR(cn). Длина атрибута - результирующая длина CHAR(cn). |
Замена символов:
В зависимости от значения, заданного для строка-формата, определенные символы в именах столбцов и значениях столбцов заменяются, чтобы гарантировать, что имена столбцов составляют правильные значения атрибутов XML, и значение столбцов составляют правильные значения элементов XML.
Таблица 130. Замена символов для значений атрибутов XML и значений элементов
| Символ | Замена |
|---|---|
< |
< |
> |
> |
" |
" |
& |
& |
' |
' |
Примеры:
Примечание: REC2XML не вставляет символы новой строки в вывод. Вывод примеров форматирован для читабельности.
SELECT REC2XML(1.0, 'COLATTVAL', '', DEPTNO, MGRNO, ADMRDEPT)
FROM DEPARTMENT
WHERE DEPTNO = 'D01'
Этот пример возвращает следующую строку VARCHAR(117):
<row> <column name="DEPTNO">D01</column> <column name="MGRNO" null="true"/> <column name="ADMRDEPT">A00</column> </row>
Длина атрибута для вызова REC2XML (см. ниже) с коэффициентом расширения 1.0 будет 128 (11 для заголовков '<row>' и '</row>', 21 для имен столбцов, 75 для '<column name=', '>', '</column>' и двойных кавычек, 7 для данных CLASS_CODE, 6 для данных DAY и 8 для данных STARTING). Поскольку символы '&' и '<' будут заменены, коэффициент расширения 1.0 будет недостаточным. Нужно будет, чтобы длина атрибута функция поддерживала увеличение на от 7 до 14 символов для нового формата данных CLASS_CODE.
Однако, поскольку известно, что значение DAY никогда не будет длинее 1 цифры, неиспользуемые 5 единиц длины добавляются к общей. Следовательно, расширение только должно обрабатывать увеличение на 2. Поскольку CLASS_CODE является единственным столбцом типа строки символов в списке аргументов, это единственные данные столбца, к которым применяется коэффициент расширения. Чтобы получить увеличение длины на 2,нужен будет коэффициент расширения 9/7 (примерно, 1.2857). Будет использован коэффициент расширения 1.3.
SELECT REC2XML(1.3, 'COLATTVAL', 'record', CLASS_CODE, DAY, STARTING)
FROM CL_SCHED
WHERE CLASS_CODE = '&43<FIE'
Этот пример возвращает следующую строку VARCHAR(167):
<record> <column name="CLASS_CODE">&43<FIE</column> <column name="DAY">5</column> <column name="STARTING">06:45:00</column> </record>
SELECT REC2XML(1.0, 'COLATTVAL_XML', 'row', EMPNO, RESUME_XML)
FROM (SELECT EMPNO, CAST(RESUME AS VARCHAR(3500)) AS RESUME_XML
FROM EMP_RESUME
WHERE RESUME_FORMAT = 'XML')
AS EMP_RESUME_XML
Этот пример возвращает строку для каждого сотрудника, который имеет резюме в формате XML. Каждая возвращенная строка ьудет строкой символов в следующем формате:
<row>
<column name="EMPNO">{employee number}</column>
<column name="RESUME_XML">{resume in XML}</column>
</row>
Где "{employee number}" - значение EMPNO для столбца, "{resume in XML}" - фактическое значение строки - фрагмента XML, являющейся резюме.
| Назад | Оглавление | Вперед |
| Каталог | Индекс раздела |