Sql 使用多个命名空间从oracle中的CLOB数据字段导出xml值
我有一个包含x个记录的表。其中一个字段是CLOB,包含带有特定字段的XML 这是一个非常简短的XML版本Sql 使用多个命名空间从oracle中的CLOB数据字段导出xml值,sql,xml,oracle,Sql,Xml,Oracle,我有一个包含x个记录的表。其中一个字段是CLOB,包含带有特定字段的XML 这是一个非常简短的XML版本 <metadata xml:lang="en" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org
<metadata xml:lang="en"
xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:srv="http://www.isotc211.org/2005/srv" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<gmd:GEMINI_Metadata>
<gmd:fileIdentifier>
<gco:CharacterString>cf40a39a-0721-4fd4-84f3-adc28aee1158</gco:CharacterString>
</gmd:fileIdentifier>
<gmd:dateStamp>
<gco:Date>2019-01-16</gco:Date>
</gmd:dateStamp>
</gmd:GEMINI_Metadata>
</metadata>
我得到以下信息
select EXTRACT (XMLType (DOCUMENTATION), '//fileIdentifier//gco:CharacterString','xmlns:gmd="http://www.isotc211.org/2005/gmd"', 'xmlns:gco="http://www.isotc211.org/2005/gco"') as DOCUMENTATION from sde.gdb_items_vw where name = 'testTable'
ORA-00939: too many arguments for function
DOCUMENTATION
--------------------------------------------------------------------------------
<gmd:fileIdentifier xmlns:gmd="http://www.isotc211.org/2005/gmd"><gco:CharacterS
如果我尝试只指定一个标记和一个名称空间,就像这样
select EXTRACT (XMLType (DOCUMENTATION), '//gmd:fileIdentifier','xmlns:gmd="http://www.isotc211.org/2005/gmd"') as DOCUMENTATION from sde.gdb_items_vw where name = 'testTable';
我得到以下信息
select EXTRACT (XMLType (DOCUMENTATION), '//fileIdentifier//gco:CharacterString','xmlns:gmd="http://www.isotc211.org/2005/gmd"', 'xmlns:gco="http://www.isotc211.org/2005/gco"') as DOCUMENTATION from sde.gdb_items_vw where name = 'testTable'
ORA-00939: too many arguments for function
DOCUMENTATION
--------------------------------------------------------------------------------
<gmd:fileIdentifier xmlns:gmd="http://www.isotc211.org/2005/gmd"><gco:CharacterS
那么,获取在其树中具有多个名称空间的特定标记的正确方法是什么呢?最好的方法是使用XMLTABLE。在这里,您可以轻松地指定名称空间
SELECT doc AS documentation
FROM sde.gdb_items_vw,
XMLTABLE( xmlnamespaces( 'http://www.isotc211.org/2005/gmd' AS "gmd",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi",
'http://www.isotc211.org/2005/gco' AS "gco",
'http://www.isotc211.org/2005/srv' AS "srv",
'http://www.isotc211.org/2005/gts' AS "gts",
'http://www.opengis.net/gml' AS "gml",
'http://www.w3.org/1999/xlink' AS "xlink",
'urn:schemas-microsoft-com:xslt' AS "msxsl"
),
'/metadata' PASSING XMLTYPE(documentation)
COLUMNS doc VARCHAR2(1000) PATH 'gmd:fileIdentifier/gco:CharacterString'
);
结果:
DOCUMENTATION
------------------------------------
cf40a39a-0721-4fd4-84f3-adc28aee1158
谢谢,但这似乎并没有从xml中获取值cf40a39a-0721-4fd4-84f3-adc28aee1158,如果我在您的回答中选择名称,则会显示名称,但除去此项,xml中不会显示任何内容-我需要字符串之间的文本tag@MapMan好的,我的测试中只有name列。我已将其从查询中删除。但是查询的结果应该是您想要的:cf40a39a-0721-4fd4-84f3-ADC28AEE1158我遗漏了我添加的示例xml上的一个标记,但是在传递关键字之前,我已将“\metadata”替换为“\gmd:GEMINI_metadata”,但什么都没有appears@MapMan您只需要调整路径。路径'gmd:GEMINI_Metadata/gmd:fileIdentifier/gco:CharacterString'完美,感谢您的帮助!