你的位置:首页 > 数据库

[数据库]Oracle XMLTable 使用教程与实例

从Oracle 10g开始,甲骨文公司新增了XQuery和两个功能作为处理

本文我们将了解Oracle 

考虑到员工会有一些

Create TABLE EMPLOYEES

(

id NUMBER,

data

)

表创建完成后,我们往表里插入一些数据:

 SQL Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

 

Insert INTO EMPLOYEES
     VALUES (1, '<Employees>
    <Employee emplid="1111" type="admin">
        <firstname>John</firstname>
        <lastname>Watson</lastname>
        <age>30</age>
        <email>[email protected]</email>
    </Employee>
    <Employee emplid="2222" type="admin">
        <firstname>Sherlock</firstname>
        <lastname>Homes</lastname>
        <age>32</age>
        <email>[email protected]</email>
    </Employee>
    <Employee emplid="3333" type="user">
        <firstname>Jim</firstname>
        <lastname>Moriarty</lastname>
        <age>52</age>
        <email>[email protected]</email>
    </Employee>
    <Employee emplid="4444" type="user">
        <firstname>Mycroft</firstname>
        <lastname>Holmes</lastname>
        <age>41</age>
        <email>[email protected]</email>
    </Employee>
</Employees>'));


注意:

1、有4名员工在我们的

2、每个员工都有通过属性定义一个唯一的员工id emplid

3、每个员工也有一个属性type,定义雇员是否是管理员或用户。

4、每个员工都有四个子节点: firstname , lastname , age和email

5、年龄是多少

现在我们可以使用Oracle 从

 

1、学习XPath表达式

使用XPath。XPath使用路径表达式来选择

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元素


 

其他更多的表达式可以参考Oracle官方手册

 

2、Oracle

读取Employees中所有firstname和lastname

在这个查询中,我们使用从EMPLOYEES表解析

select t.id, x.*

from employees t,

('/Employees/Employee' passing t.data columns firstname

varchar2(30) path 'firstname',

lastname varchar2(30) path 'lastname') x

where t.id = 1;

('<XQuery>'

PASSING < column>

COLUMNS <new column name> <column type> PATH <XQuery path>)

COLUMNS 子句用于将

输出:

 

使用text()读取节点值

在上面的教程中,我们读取到了firstname / lastname节点。通常我们还需要获取节点的文本值,下面的例子中,我们选取/Employees/Employee/firstname路径,并使用text()获取节点的值。

下面查询employees中所有的firstname

select t.id, x.*

from employees t,

('/Employees/Employee/firstname' passing t.data columns

firstname varchar2(30) path 'text()') x

where t.id = 1

输出:

不仅仅是text()表达式,Oracle还提供了其他很多有用的表达式,如 item(), node(), attribute(), element(), document-node(), namespace(), text(), xs:integer, xs:string。

 

读取所选节点的属性

select emp.id, x.*

from employees emp,

('/Employees/Employee' passing emp.data columns firstname

varchar2(30) path 'firstname',

type varchar2(30) path [email protected]') x;

输出:

 

使用ID读取特定的记录

select t.id, x.*

from employees t,

('/Employees/Employee[@emplid=2222]' passing t.data columns

firstname varchar2(30) path 'firstname',

lastname varchar2(30) path 'lastname') x

where t.id = 1;

输出:

 

读取所有类型是admin的员工的firstname 和 lastname

select t.id, x.*

from employees t,

('/Employees/Employee[@type="admin"]' passing t.data columns

firstname varchar2(30) path 'firstname',

lastname varchar2(30) path 'lastname') x

where t.id = 1;

输出:

 

读取年龄超过40的所有员工的firstname 和 lastname

select t.id, x.*

from employees t,

('/Employees/Employee[age>40]' passing t.data columns

firstname varchar2(30) path 'firstname',

lastname varchar2(30) path 'lastname',

age varchar2(30) path 'age') x

where t.id = 1;

输出:

 

本文由UncleToo翻译整理,转载请注明出处!

原文(英文)地址:http://viralpatel.net/blogs/oracle-


去四川旅游要多少钱去四川旅游最佳路线去四川旅游最佳时间四川旅游线路报价四川旅游攻略大全2015清明节东莞哪里有活动?东莞清明节去哪好玩? 2015清明节广东去哪好玩?广东清明节有什么好玩地方? 2015清明节锦绣中华好玩吗?深圳锦绣中华清明节门票多少钱? 细数四川的牛逼哄哄 你所不知道的四川(4) 2015春节流溪河森林公园有什么活动?从化流溪河春节活动介绍? 新年开启津城温泉之旅 泡出健康好气色 2015春节流溪河森林公园有梅花吗?从化流溪河春节赏花攻略? 流溪河国家森林公园真人CS多少钱?从化流溪河cs野战怎么收费? 新西兰最佳旅游时节是什么时候? 十月不可错过的省内最美秋色之银杏谷 北京天坛最佳旅游时间是什么时候? 十月不可错过的省内最美秋色 在香港吃饭贵不贵?在香港吃饭怎样省钱? 香港哪里可以露营? 香港南丫岛好玩吗?香港南丫岛哪里好玩? 港澳通行证的有效期是多久? AQ12EA620GAJME Datasheet AQ12EA620GAJME Datasheet 08055U101FAT9A Datasheet 08055U101FAT9A Datasheet AQ12EA620JAJME Datasheet AQ12EA620JAJME Datasheet 安顺出发去荷属安的列斯旅游 安顺出发去荷属安的列斯旅游 安顺出发去荷属安的列斯旅游 安顺出发去洪都拉斯旅游 安顺出发去洪都拉斯旅游 安顺出发去洪都拉斯旅游 安顺出发去花岙岛旅游 安顺出发去花岙岛旅游 安顺出发去花岙岛旅游