| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |
Преобразование типа данных в другой тип может происходить явно или неявно. Функции преобразования, предложение CAST или предложение XMLCAST могут быть использованы для явного изменения типа данных в зависимости от участвующих типов. Менеджер базы данных может неявно преобразовывать типы данных во время присваивания, в котором участвуют различимые (distinct) типы. Кроме того, когда создается производная (sourced) функция, определяемая пользователем, типы данных параметров исходной функции должны быть преобразуемы в типы данных функции, которая создается.
Поддерживаемые преобразования между XML и другими типами данных показаны в таблице 2.
Поддерживаются следующие преобразования, включающие в себя различимые типы:
Таблица 1. Преобразование из XML в другие типы данных
| Целевой тип данных | Возможность преобразования в XML | Целевой тип данных | Возможность преобра-зования из XML | |
|---|---|---|---|---|
| SMALLINT | Y1 | SMALLINT | Y3 | |
| INTEGER | Y1 | INTEGER | Y3 | |
| DECIMAL | Y1 | DECIMAL | Y3 | |
| REAL | Y1 | REAL | Y3 | |
| DOUBLE | Y1 | DOUBLE | Y3 | |
| CHAR | Y2 | CHAR | Y3 | |
| VARCHAR | Y2 | VARCHAR | Y3 | |
| LONG VARCHAR | Y1 | LONG VARCHAR | Y3 | |
| CLOB | Y2 | CLOB | Y3 | |
| GRAPHIC | Y1 | GRAPHIC | Y3 | |
| VARGRAPHIC | Y1 | VARGRAPHIC | Y3 | |
| LONG VARGRAPHIC | Y1 | LONG VARGRAPHIC | Y3 | |
| DBCLOB | Y1 | DBCLOB | Y3 | |
| DATE | Y1 | DATE | Y3 | |
| TIME | Y1 | TIME | Y3 | |
| TIMESTAMP | Y1 | TIMESTAMP | Y3 | |
| BLOB | Y2 | BLOB | Y3 | |
| 1 Преобразование может быть выполнено только при помощи XMLCAST.
2 Неявно выполняется функция XMLPARSE для преобразования строки XML при присваивании (INSERT или UPDATE) символьной строки столбцу XML. Для успешного присваивания символьная строка должна быть правильно форматированным XML-документом. 3 Преобразование может быть выполнено только при помощи XMLCAST и зависит от типа данных XML schema для значения XML. Подробности см. в "XMLCAST". | ||||
Таблица 2. Поддерживаемые преобразования не-XML значений в значения XML
| Исходный тип данных | Целевой тип данных | |
|---|---|---|
| XML | Результирующий тип XML Schema | |
| SMALLINT | Y | xs:short |
| INTEGER | Y | xs:int |
| BIGINT | Y | xs:long |
| DECIMAL или NUMERIC | Y | xs:decimal |
| REAL | Y | xs:float |
| DOUBLE | Y | xs:double |
| CHAR | Y | xs:string |
| VARCHAR | Y | xs:string |
| LONG VARCHAR | Y | xs:string |
| CLOB | Y | xs:string |
| GRAPHIC | Y | xs:string |
| VARGRAPHIC | Y | xs:string |
| LONG VARGRAPHIC | Y | xs:string |
| DBCLOB | Y | xs:string |
| DATE | Y | xs:date |
| TIME | Y | xs:time |
| TIMESTAMP | Y | xs:dateTime |
| BLOB | Y | xs:base64Binary |
| символьный тип FOR BIT DATA | Y | xs:base64Binary |
| различимый тип | используйте эту таблицу с исходным типом различимого типа | |
При преобразовании значений символьных строк в значения XML, результирующее атомарное значение xs:string не может содержать недопустимых символов XML (SQLSTATE 0N002). Если входная символьная строка не в Unicode, входные символы конвертируются в Unicode.
Преобразование в двоичные типы SQL дают в результате атомарные значения XQuery с типом xs:base64Binary.
XMLCAST из значения XML в значение не-XML может быть описано как два преобразования: преобразование XQuery, которое преобразует исходное значение XML в тип XQuery, соответствующий целевому типу SQL, за которым следует преобразование соответствующего XQuery-типа в SQL-тип.
XMLCAST поддерживается, если целевой тип имеет соответствующий целевой тип that is XQuery и если поддерживается преобразование XQuery из типа исходного значения в соответствующий целевой тип XQuery. Целевой тип, который используется в преобразовании XQuery базируется на соответствующем целевом типе XQuery и может иметь некоторые дополнительные ограничения.
В следующей таблице приведены типы XQuery, которые получаются из таких преобразований.
Таблица 3. Поддерживаемые преобразования из значений XML в значения не- XML
Преобразование значений XML в значения не-XML
| Целевой тип данных | Исходный тип данных | |
|---|---|---|
| XML | Соответствующий целевой тип XQuery | |
| SMALLINT | Y | xs:short |
| INTEGER | Y | xs:int |
| BIGINT | Y | xs:long |
| DECIMAL или NUMERIC | Y | xs:decimal |
| REAL | Y | xs:float |
| DOUBLE | Y | xs:double |
| FLOAT | Y | xs:double или xs:float |
| CHAR | Y | xs:string |
| VARCHAR | Y | xs:string |
| LONG VARCHAR | N | не преобразуется |
| CLOB | Y | xs:string |
| GRAPHIC | Y | xs:string |
| VARGRAPHIC | Y | xs:string |
| LONG VARGRAPHIC | N | не преобразуется |
| DBCLOB | Y | xs:string |
| DATE | Y | xs:date |
| TIME (без временной зоны) | Y | xs:time |
| TIMESTAMP (без временной зоны) | Y | xs:dateTime |
| BLOB | Y | xs:base64Binary |
| CHAR FOR BIT DATA | N | не преобразуется |
| VARCHAR FOR BIT DATA | Y | xs:base64Binary |
| различимый тип | используйте эту таблицу с исходным типом различимого типа | |
| row reference structured / ADT other | N | не преобразуется |
В следующих случаях тип данных, производный ограничением типа данных XML schema эффективно используется как целевой тип данных для преобразования XQuery.
Имя производного типа XML schema появляется только в сообщении, если значение XML не удовлетворяет одному из этих ограничений. Это имя типа помогает понять сообщение об ошибке и не связано с каким-либо определенным типом XQuery. Если входное значение не удовлетворяет базовому типу производного типа XML schema (соответствующий целевой тип XQuery), сообщение об ошибке может показать вместо этого базовый тип. Поскольку этот формат производных типов XML schema может в будущем измениться, его не следует использовать как программный интерфейс.
Прежде, чем значение XML обрабатывается преобразованием XQuery, любой узел документа в последовательности удаляется и каждый непосредственный потомок удаленного узла документа становится пунктом в последовательности. Если узел документа имеет много узлов - непосредственных потомков, исправленная последовательность будет иметь больше узлов, чем исходная последовательность. Значение XML без каких-либо узлов документа используется в преобразовании XQuery. Если в последовательности есть повторяющиеся пункты, возвращается ошибка (SQLSTATE 10507).
Если целевой тип XMLCAST является типом данных SQL DATE, TIME или TIMESTAMP, результирующее значение XML в преобразовании XQuery также приводится к UTC, а компонент временной зоны в значении удаляется.
Если соответствующий целевой тип XQuery конвертируется в целевой тип SQL, двоичные типы данных XML, такие как xs:base64Binary или xs:hexBinary конвертируются из символьной формы в действительные двоичные данные.
Если конвертируется (при помощи XMLCAST) тип xs:double или xs:float со значениями INF, -INF или NaN в тип данных SQL DOUBLE или REAL, возвращается ошибка (SQLSTATE 22003). Значение xs:double или xs:float -0 конвертируется в +0.
Целевой тип может быть определенным пользователем различимым типом, если исходный операнд ? не определенный пользователем различимый тип. В этом случае исходное значение преобразуется в исходный тип определенного пользователем различимого типа (т.е., целевой тип) при помощи предложения XMLCAST, а затем это значение преобразуется в определенный пользователем различимый тип при помощи CAST.
| Назад | Оглавление | Вперед |
| Каталог | Индекс раздела |