在 Oracle 中提取 XML 数据时总是空白

问题描述

我在 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,但总是出现空白。

我的目标是:

ID 标签 标题
1 列名 1 标题 1
1 名称 2 标题 2
2 一个名字1 一个标题 1
2 一个名字2 一个字幕2
2 一个名字3 一个字幕 3

解决方法

你必须指定命名空间:

CROSS JOIN XMLTABLE(XMLNAMESPACES(DEFAULT 'http://tempuri.org/Storage.xsd'),'/Storage/ColumnInfo'