问题描述
嗨,汤姆,
我不是XML专家。我有一个灵活的基于属性的XML存储到XMLTYPE列TBTest.C1(XMLTYPE) 中的表,它是来自上游队列的消息。消息的XPATHs就像-
样本数据:
我希望将这些数据提取成表格形式。我一直在尝试使用XMLTABLE运算符来获取数据,但无法成功。
我怎样才能实现这一点,任何快速的SQL来解决这个问题?
谢谢!
我不是XML专家。我有一个灵活的基于属性的XML存储到XMLTYPE列TBTest.C1(XMLTYPE) 中的表,它是来自上游队列的消息。消息的XPATHs就像-
/*[name()='Message'] /*[name()='Message']/*[name()='Version'] /*[name()='Message']/*[name()='DateTime'] /*[name()='Message']/*[name()='Object'] /*[name()='Message']/*[name()='ObjectProperties'] /*[name()='Message']/*[name()='ObjectProperties']/*[name()='EventId'] /*[name()='Message']/*[name()='ObjectProperties']/*[name()='SourceSystem'] /*[name()='Message']/*[name()='ObjectProperties']/*[name()='EventType'] /*[name()='Message']/*[name()='AdditionalObjectProperties'] /*[name()='Message']/*[name()='AdditionalObjectProperties']/*[name()='ObjectElementValue'] /*[name()='Message']/*[name()='TestStatus'] /*[name()='Message']/*[name()='TestStatus']/*[name()='TestResult']复制
样本数据:
v2.0 2018-06-10T11:00:05Z 0000121 S1 New 42440 B1-42440 B1 New Pass Fail NA Fail Fail Fail 复制
我希望将这些数据提取成表格形式。我一直在尝试使用XMLTABLE运算符来获取数据,但无法成功。
我怎样才能实现这一点,任何快速的SQL来解决这个问题?
谢谢!
专家解答
您可以使用XMLTable来执行此操作。以下是一些原则:
XML具有命名空间xmlns = "urn:message"。所以你要包括:
在所有XMLTable调用的开始。因此,要获取元素的值,请执行以下操作:
您有多个具有相同名称的元素。要将这些提取到单独的行中,请将XMLTable调用链接在一起。通过将重复的元素定义为XMLType列来做到这一点。然后要将重复的元素变成行,请在下一个XMLTable调用的传递子句中使用双斜杠前缀:
@ prefix允许您访问属性值。
从这里开始,根据需要继续链接呼叫:
表创建和填充脚本:
XML具有命名空间xmlns = "urn:message"。所以你要包括:
xmlnamespaces ( default 'urn:message' )复制
在所有XMLTable调用的开始。因此,要获取元素的值,请执行以下操作:
select tests.* from t, xmltable ( xmlnamespaces ( default 'urn:message' ), '/' passing t.x columns DateTime path '/Message/DateTime', event_id path '/Message/ObjectProperties/EventId' ) tests; DATETIME EVENT_ID 2018-06-10T11:00:05Z 0000121复制
您有多个具有相同名称的元素。要将这些提取到单独的行中,请将XMLTable调用链接在一起。通过将重复的元素定义为XMLType列来做到这一点。然后要将重复的元素变成行,请在下一个XMLTable调用的传递子句中使用双斜杠前缀:
select event_id, datetime, control_id from t, xmltable ( xmlnamespaces ( default 'urn:message' ), '/' passing t.x columns DateTime path '/Message/DateTime', event_id path '/Message/ObjectProperties/EventId', test_status xmltype path '/Message/TestStatus' ) tests, xmltable ( xmlnamespaces ( default 'urn:message' ), '//TestStatus' passing tests.test_status columns control_id path '@ControlId' ) results; EVENT_ID DATETIME CONTROL_ID 0000121 2018-06-10T11:00:05Z T1 0000121 2018-06-10T11:00:05Z T2复制
@ prefix允许您访问属性值。
从这里开始,根据需要继续链接呼叫:
select event_id, datetime, control_id, test_id, res from t, xmltable ( xmlnamespaces ( default 'urn:message' ), '/' passing t.x columns DateTime path '/Message/DateTime', event_id path '/Message/ObjectProperties/EventId', test_status xmltype path '/Message/TestStatus' ) tests, xmltable ( xmlnamespaces ( default 'urn:message' ), '//TestStatus' passing tests.test_status columns test_result xmltype path '/TestStatus/TestResult', control_id path '@ControlId' ) results, xmltable ( xmlnamespaces ( default 'urn:message' ), '//TestResult' passing results.test_result columns test_id path '@TestId', res path 'text()' ); EVENT_ID DATETIME CONTROL_ID TEST_ID RES 0000121 2018-06-10T11:00:05Z T1 BB-0001 Pass 0000121 2018-06-10T11:00:05Z T1 BB-0002 Fail 0000121 2018-06-10T11:00:05Z T1 BB-0003 NA 0000121 2018-06-10T11:00:05Z T2 BT-0001 Fail 0000121 2018-06-10T11:00:05Z T2 BT-0002 Fail 0000121 2018-06-10T11:00:05Z T2 BT-0003 Fail复制
表创建和填充脚本:
create table t ( x xmltype ); insert into t values (xmltype ('')); v2.0 2018-06-10T11:00:05Z 0000121 S1 New 42440 B1-42440 B1 New Pass Fail NA Fail Fail Fail 复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
736次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
644次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
564次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
511次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
509次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
495次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
477次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
436次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
369次阅读
2025-05-05 19:28:36