【发布时间】:2022-01-21 09:56:03
【问题描述】:
我在 Oracle 表中有 XML 列,其中有这个字符串:
如果存在,我需要提取该字段的值,在上面的示例中它不存在。 在下面的示例中,该值存在:
最好的方法是什么?
谢谢。
【问题讨论】:
我在 Oracle 表中有 XML 列,其中有这个字符串:
如果存在,我需要提取该字段的值,在上面的示例中它不存在。 在下面的示例中,该值存在:
最好的方法是什么?
谢谢。
【问题讨论】:
XMLTABLE 将是一个不错的选择,以这样的方式使用
SELECT x.*
FROM xml_tab t,
XMLTABLE('//Root'
PASSING xml_data
COLUMNS
field1 INT PATH 'field[@name="Text1"]/value',
field2 INT PATH 'field[@name="Text2"]/value'
) x
返回
| FIELD1 | FIELD2 |
|---|---|
| 12345 |
xml_data 在哪里
<Root>
<field name="Text1" type="String">
<value>12345</value>
</field>
<field name="Text2" type="String">
<value/>
</field>
</Root>
PS。 EXTRACTVALUE 函数已弃用。它仍然支持向后兼容。但是,Oracle 建议您使用 XMLTABLE 函数,或者改用 XMLCAST 和 XMLQUERY 函数
【讨论】:
如你所说:提取价值。
SQL> with test (col) as
2 (select '<field name="Text1" type="String"><value>12345</value></field>'
3 from dual
4 )
5 SELECT extractvalue(xmltype(col), '/field/value') result
6 from test;
RESULT
----------------------------------------------------------------------------------------------------
12345
SQL>
【讨论】: