КаталогИндекс раздела
НазадОглавлениеВперед


Преобразование типов данных

Преобразование типа данных в другой тип может происходить явно или неявно. Функции преобразования, предложение 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".

Преобразование значений не-XML в значения XML

Таблица 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.

Преобразование значений XML в значения не-XML

XMLCAST из значения XML в значение не-XML может быть описано как два преобразования: преобразование XQuery, которое преобразует исходное значение XML в тип XQuery, соответствующий целевому типу SQL, за которым следует преобразование соответствующего XQuery-типа в SQL-тип.

XMLCAST поддерживается, если целевой тип имеет соответствующий целевой тип that is XQuery и если поддерживается преобразование XQuery из типа исходного значения в соответствующий целевой тип XQuery. Целевой тип, который используется в преобразовании XQuery базируется на соответствующем целевом типе XQuery и может иметь некоторые дополнительные ограничения.

В следующей таблице приведены типы XQuery, которые получаются из таких преобразований.

Таблица 3. Поддерживаемые преобразования из значений 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.


НазадОглавлениеВперед
КаталогИндекс раздела