EXTRACTVALUE

说明

Extractvalue函数使用一个xmltype类型的变量和一个xpath表达式作为参数,把目标节点的值以varchar类型的形式返回。Xpath表达式的计算结果必须是一个单节点,并且只能是text、attribute或element节点中的一种。Xpath指向的节点是一个元素节点,则这个元素节点只能有一个text节点的孩子,text 节点的内容会作为函数的结果返回。若xpath表达式以’/’开始,则表示表达式是一个绝对路径,省掉开始的’/’则为相对路径。若你省掉开始的’/’,则相对路径是相对于xml数据的根节点。(兼容Oracle)

语法

extractvalue ::=

参数

XMLType_instance

用于指定XMLType实例

Xpath_string

用于指定XML节点路径

返回值

Xpath表达式指向节点的值

注释

该函数暂不支持指定namespace

示例

示例1:

SQL> select extractvalue(xmltype('<aa><bb>bb</bb></aa>'), 'aa/bb');
EXTRACTVALUE
--------------
bb
(1 row)

示例2:

Create TABLE EMPLOYEES
(
  id     NUMBER,
  data   XMLTYPE
);
Insert INTO EMPLOYEES
VALUES (1, 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>'));

SQL> SELECT extractvalue(data,'/Employees/Employee[@emplid="4444"]/age') FROM EMPLOYEES;
EXTRACTVALUE
--------------
41
(1 row)