问题描述
我在 Oracle NCLOB 上有一个 XML 数据:
<Storage xmlns="http://tempuri.org/Storage.xsd">
<TableInfo>
<Name>Table Name</Name>
<Description>Table Description</Description>
...
</TableInfo>
<ColumnInfo>
<Name>Column Name 1</Name>
<Caption>Column Caption 1</Caption>
...
</ColumnInfo>
<ColumnInfo>
<Name>Column Name 2</Name>
<Caption>Column Caption 2</Caption>
...
</ColumnInfo>
...
在 Oracle 中,这是我提取数据的尝试:
...
CROSS JOIN XMLTABLE('/Storage/ColumnInfo'
PASSING XMLTYPE(cv.dictionary_data) -- NCLOB column holding the XML
COLUMNS
tag VARCHAR2(500) PATH 'Name',caption VARCHAR2(500) PATH 'Caption'
) x
...
我一直在尝试使用绝对和相对 XPath 来替换 /Storage/ColumnInfo
,但总是出现空白。
我的目标是:
解决方法
你必须指定命名空间:
CROSS JOIN XMLTABLE(XMLNAMESPACES(DEFAULT 'http://tempuri.org/Storage.xsd'),'/Storage/ColumnInfo'