<input xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" user="ABC" userid="xyz123" xmlns="urn:www.google.com/testsystem">
<ProcessData>
<reviewYear>2014-2015</reviewYear>
</ProcessData>
</input>
我在xmltype列中有上面的示例数据,提取userid或user值的值的sql查询是什么。我尝试了几种使用/ input和namespace的方法,没有返回任何值,谢谢。
答案 0 :(得分:0)
您需要包含默认命名空间。您可以告诉这是默认值,因为没有名称空间前缀。
WITH test_data AS (
SELECT
xmltype('<input xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" user="ABC" userid="xyz123" xmlns="urn:www.google.com/testsystem">
<ProcessData>
<reviewYear>2014-2015</reviewYear>
</ProcessData>
</input>'
) xml_col
FROM
dual
) SELECT
extractvalue(
xml_col,
'/input/@user',
'xmlns="urn:www.google.com/testsystem"'
) user_val,
extractvalue(
xml_col,
'/input/@userid',
'xmlns="urn:www.google.com/testsystem"'
) userid_val
FROM
test_data
答案 1 :(得分:0)
以下是使用XMLTABLE()
函数提取属性的方法。请注意USER
作为列名的候选者,因为user
是Oracle中的保留字。您最好使用不同的列名称,可能是USR
,如下所示:
select x.usr, x.userid
from test_data td,
xmltable('/'
passing td.xml_str
columns
usr varchar2(100) path '@user',
userid varchar2(80) path '@userid'
) x
;
其中test_data
是包含XML列xml_str
的表的名称(使用您的实际表名和列名,或将字符串传递给XMLTABLE()
的任何机制。)