金仓数据库KingbaseES xml特性
关键字:
KingbaseES、xml、xmltype
1.oracle下的xmltype 类型
XML数据存储
XMLTYPE可以作为表或者视图的列的数据类型,也可以用作函数的参数类型。Oracle默认将XML数据存储在关系对象列中,也可以指定存储在CLOB或者 binary XML列中。
XMLTYPE有自己的方法,其中既有构造函数,普通成员函数,也有静态成员函数。XMLTYPE支持的成员函数。
getClobVal()
xmltype('<a><b>1</b><c>2</c></a>').extract('/a/b/text()').getclobval()
getStringVal()
xmltype('<a><b>1</b><c>2</c></a>').extract('/a/b/text()').getstringval()
getNumberVal()
xmltype('<a><b>1</b><c>2</c></a>').extract('/a/b/text()').getnumberval()
existsnode
xmltype('<a><b>1</b><c>2</c></a>').existsnode('/a/b/text()')
extract
xmltype('<a><b>1</b><c>2</c></a>').extract('/a/b')
isfragment()
xmltype('<a><b>1</b><c>2</c></a>').isfragment()
createXML(xmlData in clob)
xmlType.createXML('<a><b>2</b><c>3</c></a>'));
createXML(xmlData in varchar2)
xmlType.createXML('<a><b>1</b></a>')
等等。
XMLTYPE是Oracle的系统内置类型,Oracle不支持直接在对象关系表中XMLTYPE列上创建索引,但可以使用XMLTYPE列创建基于函数的索引。XMLTYPE可作为||操作符的左值或右值参数,这时将隐式转换为字符串类型参与运算。XMLTYPE不支持其他操作符,XMLTYPE类型支持对XML数据的合法性进行检查。支持字符串类型向XMLTYPE类型进行隐式转换。不支持字符串类型向XMLTYPE类型进行强制转换。支持XMLTYPE类型向varchar2类型强制转换。
2. 兼容oracle模式下的新增xmltype 类型
KES内置xml类型,是一个简单内置类型,该类型支持存储XML数据。xml类型可以作为表或者视图的列类型,也可用于函数的参数或者返回值类型。支持由xml类型向text/bpchar/varchar类型的隐式类型转换,但不支持反向的隐式类型转换。支持在xml类型与text/bpchar/varchar类型之间的双向隐式类型转换,以及许多操作xml类型数据的Oracle兼容函数。xml类型支持对XML数据的合法性进行检查,内置的XML类型支持函数extract()、existsnode(),内置的XML类型支持函数xmlagg()及其转换函数xmlconcat2()。但是在实际的使用过程中,需要兼容oracle的xmltype数据类型,方便调用成员函数用于xml 数据处理。新增的XMLTYPE与已有xml类型兼容,支持所有xml类型处理函数。支持XML格式检查。 对于不合格的XML字符串,xml解析器的行为受GUC参数xmloption控制。当xmloption=content(默认)时,xml解析器将不合格的输入字符串当作XML元素内容;当xmloption=document时,xml解析器对不合格的输入字符串报错处理。对于空字符串或空值null,均会被xml解析器作为null处理,生成的实例为null。这个处理方式与内置的xml类型完全相同。
在实现方面,由于kes 需要兼容xmltype,需要增添成员函数,所以对函数嵌套是的数据类型比较重要。如图:
Xmlagg 接受 xml 或者 xmltype 类型返回相对相应的值,在sql 中可以实现xml 与xmltype 的相互转换,但是在plsql 中尚不能实现 xml 到xmltype转换,需注意。
如果是返回的xmltype可以直接用成员函数,以下部分是未兼容部分。
CREATENONSCH EMABASEDXML
CREATESCH EMABASEDXML
GETNAMESPACE
GETNUMBERVAL
GETROOTELEMENT
GETSCHEMAURL
ISSCHEMABASED
ISSCHEMAVALID
ISSCHEMAVALIDATED
SCHEMAVALIDATE
SETSCHEMAVALIDATED
TOOBJECT
TRANSFORM
GETBLOBVAL
更多信息,参见https://help.kingbase.com.cn/v8/index.html