KingbaseES 与 Oracle XML 语法比较
KingbaseES 内置支持 XML 相关操作,也可以通过xml2 插件进行扩展支持。以下通过例子介绍 KingbaseES XML 与Oracle 在用法上存在的一些差异。
一、数据准备
create table t1(content xml);
insert into t1 values( xml ('<Employees>
<Employee emplid="1111" type="admin">
<firstname>John</firstname>
<lastname>Watson</lastname>
<age>30</age>
<email>johnwatson@sh.com</email>
</Employee>
<Employee emplid="2222" type="admin">
<firstname>Sherlock</firstname>
<lastname>Homes</lastname>
<age>32</age>
<email>sherlock@sh.com</email>
</Employee>
<Employee emplid="3333" type="user">
<firstname>Jim</firstname>
<lastname>Moriarty</lastname>
<age>52</age>
<email>jim@sh.com</email>
</Employee>
<Employee emplid="4444" type="user">
<firstname>Mycroft</firstname>
<lastname>Holmes</lastname>
<age>41</age>
<email>mycroft@sh.com</email>
</Employee>
</Employees>') );
二、XML节点标记方式
|
Expression |
Description |
|
nodename |
选择所有名称为"nodename"的节点 |
|
/ |
选择根节点 |
|
// |
从当前节点选择文档中相匹配的节点,无论他们在哪里 |
|
. |
选择当前节点 |
|
.. |
选择当前节点的父节点 |
|
@ |
选择属性 |
|
employee |
选择所有名称为"employee"的节点 |
|
employees/employee |
选择所有子节点为employee的employees节点 |
|
//employee |
选择所有employee的元素,无论他们在哪里 |
|
Path Expression |
Result |
|
/employees/employee[1] |
选择第一个employee节点,它是employees的子节点。 |
|
/employees/employee[last()] |
选择最后一个employee元素,它是employees的子节点 |
|
/employees/employee[last()-1] |
选择是employees子元素的倒数第二个employee元素 |
|
//employee[@type='admin'] |
选择所有具有与'admin'的值的属性命名类型的employee元素 |
三、Extract
1、Oracle
SQL> select extract(content,'/Employees/Employee/firstname') from t1; EXTRACT(CONTENT,'/EMPLOYEES/EMPLOYEE/FIRSTNAME')
--------------------------------------------------------------------------------
<firstname>John</firstname>
<firstname>Sherlock</firstname>
<firstname>Jim</firstname>
<firstname>Mycroft</firstname>
2、KingbaseES
test=# select extract(content,'/Employees/Employee/firstname') from t1;
extract
--------------------------------------------------------------------------------------------------------------------
<firstname>John</firstname><firstname>Sherlock</firstname><firstname>Jim</firstname><firstname>Mycroft</firstname>
(1 row)
四、Xpath
XPath使用路径表达式来选择XML文档中的节点或节点列表。Oracle 没有该函数。
使用例子:
test=# select xpath('/Employees/Employee/firstname',content) from t1;
xpath
-------------------------------------------------------------------------------------------------------------------------
{<firstname>John</firstname>,<firstname>Sherlock</firstname>,<firstname>Jim</firstname>,<firstname>Mycroft</firstname>}
(1 row)
test=# select xpath('/Employees/Employee/firstname/text()',content) from t1;
xpath
-----------------------------
{John,Sherlock,Jim,Mycroft}
(1 row)
五、XMLTable
KingbaseES 有XMLTable 函数,Oracle 用 TABLE + XMLSequence 实现。
1、KingbaseES
test=# select c from t1,xmltable('/Employees/Employee/firstname' passing t1.content columns c xml path '.');
c
---------------------------------
<firstname>John</firstname>
<firstname>Sherlock</firstname>
<firstname>Jim</firstname>
<firstname>Mycroft</firstname>
(4 rows)
2、Oracle
select value(T) AS C from TABLE(XMLSequence(extract(XMLTYPE('<Employees>
<Employee emplid="1111" type="admin">
<firstname>John</firstname>
<lastname>Watson</lastname>
<age>30</age>
<email>johnwatson@sh.com</email>
</Employee>
<Employee emplid="2222" type="admin">
<firstname>Sherlock</firstname>
<lastname>Homes</lastname>
<age>32</age>
<email>sherlock@sh.com</email>
</Employee>
<Employee emplid="3333" type="user">
<firstname>Jim</firstname>
<lastname>Moriarty</lastname>
<age>52</age>
<email>jim@sh.com</email>
</Employee>
<Employee emplid="4444" type="user">
<firstname>Mycroft</firstname>
<lastname>Holmes</lastname>
<age>41</age>
<email>mycroft@sh.com</email>
</Employee>
</Employees>'),'/Employees/Employee/firstname'))) T;
C
--------------------------------------------------------------------------------
<firstname>John</firstname>
<firstname>Sherlock</firstname>
<firstname>Jim</firstname>
<firstname>Mycroft</firstname>
KingbaseES 与 Oracle XML 语法比较的更多相关文章
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- [SQL] Oracle基础语法
1.安装: oracle11g server 这里的口令为sys和system的密码.(10版本以前默认用户会有系统默认密码.) Oracle 11g 默认用户名和密码 oracle11g clien ...
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- ORACLE基本语法
ORACLE基本语法 一.ORACLE的启动和关闭1.在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oraclea.启动ORACLE系统oracle>s ...
- 【风马一族_xml】xml语法
xml语法 文档声明 用来声明xml的属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容 & ...
- How to Determine the Version of Oracle XML Publisher for Oracle E-Business Suite 11i and Release 12 (Doc ID 362496.1)
Modified: 29-Mar-2014 Type: HOWTO In this DocumentGoal Solution 1. Based upon an output file gen ...
- 安装oracle XML Database 组件
近期部署项目数据库,编译包时遇到错误: PACKAGE CTG.CTG_CSB_COMMON 编译错误 错误:PLS-00201: identifier 'XMLDOM' must be dec ...
- XML 语法规则
转摘自:http://www.w3school.com.cn/xml/xml_elements.asp XML 语法规则 XML 文档包含 XML 元素. XML 的语法规则很简单,且很有逻辑.这些规 ...
- [SQLXML]FOR XML语法导出XML的易错之处
原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 ...
- 利用XML语法 SQL 列转行
--行转列 固定xml语法 declare @xml xml ; set @xml=cast('<v>2</v><v>4</v><v>3&l ...
随机推荐
- 《系列二》-- 10、initialize-初始化bean
目录 initializeBean 方法源码如下 二.重要操作 2.1 应用 Aware 2.2 applyBeanPostProcessorsBeforeInitialization: 2.3 in ...
- 编译安装c2工具sliver以及python 客户端sdk
背景: 项目需要安装sliver服务端和客户端还有sliver的python sdk: git clone https://github.com/BishopFox/sliver.git cd sli ...
- VS2019 配置 Qt 库
如标题所说,在 VS 编译器中调用 Qt 库 首先安装一个适合 VS 的 Qt 版本 不知道怎么安装的,可以参考:Visual Studio+Qt配置开发环境 Qt 安装之后,需要在 VS 编译器中 ...
- std::vector<std::string> 与 char** 的转换
vecotr 容器中插入多条字符串,再将 vector 的地址转换为 char** 代码如下: #include <stdio.h> #include <string> #in ...
- 多线程系列(七) -ThreadLocal 用法及内存泄露分析
一.简介 在 Java web 项目中,想必很多的同学对ThreadLocal这个类并不陌生,它最常用的应用场景就是用来做对象的跨层传递,避免多次传递,打破层次之间的约束. 比如下面这个HttpSer ...
- ROS2 humble交叉编译环境配置
目录 配置 toolchain文件: 库文件 交叉编译指令: 问题点: 1.find_package找不到自定义依赖包的问题 2.libarmadillo.so.10: undefined refer ...
- celery正常启动后能接收任务但不执行(已解决)
错误截图:celery接收到任务却不执行(多出在windows系统中) 解决方法1 添加–pool=solo参数 celery -A celery_tasks.main worker --pool=s ...
- ASP.NET Core 微信支付(二)【 发布到服务器上签名加密时报错:系统找不到指定的文件 APIV3】
参考资料 .Net微信支付退款操作"系统找不到指定的文件" 错误现象 微信支付(API v3)的统一下单接口和订单查询接口在本地调试成功,可以使用,但是发布到服务器上之后调用接口就 ...
- git修改地址三种方法
1.修改命令 git remote set-url origin [NEW_URL] 2.先删后加 git remote rm origin git remote add origin [url]3. ...
- 自定义ConditionalOnXX注解(二)
一.前言 在之前的文章<自定义ConditionalOnXX注解>中,介绍了Conditional注解的实现原理和实现自定义Conditional注解的基础方法,但是有些场景我们需要用一个 ...