【发布时间】:2017-07-12 12:12:22
【问题描述】:
我对 XML 很陌生,我希望在这里列出所有相关信息。如果没有,请不要发送负面反馈。如果您让我知道您缺少哪些信息,我将不胜感激。
我未能在 Oracle 数据库 11g 的 XML 视图中的多个元素上正常运行以下查询。
我有多个 XML 文件,其结构如下:
<Qualitaetsbericht>
<Organisationseinheiten_Fachabteilungen>
<Organisationseinheiten_Fachabteilung>
<Fachabteilungsschluessel>
<Prozeduren>
<Freiwillig>
<Verpflichtend>
<Prozedur>
<OPS_301>
<Anzahl>
我通常通过以下查询得到正确的结果:
SELECT id,
d."FA_SCHLUESSEL",d."OPS_301",
CASE WHEN d."ANZAHL" IS NULL THEN '4' ELSE d."ANZAHL" END AS ANZAHL,
d."GLIEDERUNGSNUMMER",d."NAME"
FROM XMLDocs x,
XMLTable(
'/Data'
PASSING XMLQuery(
'for $i in /Qualitaetsbericht./Organisationseinheiten_Fachabteilungen/Organisationseinheit_Fachabteilung/Prozeduren/Verpflichtend/Prozedur
return <Data>
{$i/OPS_301}
{$i/Anzahl}
{$i/../../../Fachabteilungsschluessel/FA_Schluessel}
{$i/../../../Gliederungsnummer}
{$i/../../../Name}
</Data>'
PASSING doc
RETURNING CONTENT
)
COLUMNS FA_Schluessel varchar2(12) path 'FA_Schluessel',
OPS_301 varchar2(12) path 'OPS_301',
Anzahl varchar2(40) path 'Anzahl',
Gliederungsnummer varchar2(10) path 'Gliederungsnummer',
Name varchar2(600) path 'Name'
) d
但是还有一个额外的元素可以出现
如果在 XML 中给出了这个元素,我上面的查询会遇到动态类型不匹配错误。
我发现了
<Fachabteilungsschluessel>
具有这种结构
<Fachabteilungsschluessel>
<FA_Schluessel>
或
<Fachabteilungsschluessel>
<Sonstiger>
<FA_Sonstiger_Schluessel>
无论何时
<Fachabteilungsschluessel>
<Sonstiger>
<FA_Sonstiger_Schluessel>
出现在XML文档中我得到错误代码:
ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton sequence - got multi-item sequence
我希望这是一个容易解决的问题。目前我的想法已经不多了。有人可以帮忙吗? -提前致谢。
此处的示例文件:
file
【问题讨论】:
-
显示问题的正确示例 XML 将有所帮助(尽可能小,并且对真实数据进行混淆处理很好),以及您期望从该特定文档获得的输出。目前您显示的轮廓与 XPath 不匹配,并且似乎没有重复的节点,这就是错误的真正含义。顺便说一句,你为什么要在 XMLTable 中做一个单独的 XMLQuery?
-
嗨,亚历克斯,我已经编辑了帖子。您现在可以下载示例文件。我需要的金额的嵌套信息,即“FA_Schluessel”或“FA_Sonstiger_Schluessel”。在我的观点中,我看不到另一种结合显示这些数据的可能性。但我愿意接受任何更好的解决方案。
-
2.5MB 真的越小越好吗?
-
这是较小的文件之一。我知道这是一种痛苦。这些文件具有不同的级别,我不确定我是否可以操纵它们以使其仍按预期工作。如果我把它缩小了,我会立即分享缩小的文件。