接上文:如何把Oracle XML数据分解为关系型表 把关系型数据发布为XML 我们用例的最终需求是抽取并从关系表生成XML数据。 点击查看本系列文章第一部分 抽取是通过使用XMLType视图实现的,本质上是物化为SQL执行的一个存储查询结果。XMLType视图允许文档为中心的应用程序把底层的关系结构查询为虚拟的XML文档。要生成XML数据,你有几种选择。
一种常用的方法是使用对象类型,对象视图和Oracle SQL函数“sys_XMLGen”。我更喜欢使用SQL/XML结构(见列表7),或者结合XMLTable使用XQuery,或者单独使用XMLQuery,或者两者兼而有之。这些方……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
把关系型数据发布为XML
我们用例的最终需求是抽取并从关系表生成XML数据。
点击查看本系列文章第一部分
抽取是通过使用XMLType视图实现的,本质上是物化为SQL执行的一个存储查询结果。XMLType视图允许文档为中心的应用程序把底层的关系结构查询为虚拟的XML文档。要生成XML数据,你有几种选择。一种常用的方法是使用对象类型,对象视图和Oracle SQL函数“sys_XMLGen”。我更喜欢使用SQL/XML结构(见列表7),或者结合XMLTable使用XQuery,或者单独使用XMLQuery,或者两者兼而有之。这些方法都支持我显示带有最优执行路径的查询计划。
列表7:创建XMLType视图。
create or replace view abc_purchase_order_xml_view of XMLType with OBJECT ID (XMLCast(XMLQuery('/PurchaseOrder/OrderNumber'Passing OBJECT_VALUE Returning Content)as BINARY_DOUBLE)) as Select XMLElement(NOENTITYESCAPING "PurchaseOrder" ,XMLForest(po.order_number as "OrderNumber" ,po.order_date as "OrderDate" ,po.customer_name as "CustomerName" ,po.userid as "User" ,po.special_instructions as "SpecialInstructions" ) ,XMLElement(NOENTITYESCAPING "LineItems" ,(SELECT XMLAgg(XMLElement(NOENTITYESCAPING "LineItem" ,XMLAttributes(NOENTITYESCAPING li.itemno as "ItemNumber") ,XMLElement(NOENTITYESCAPING "Description", li.description) ,XMLElement(NOENTITYESCAPING "Part" ,XMLAttributes(li.partno as "Id" ,li.unitprice as "UnitPrice" ,li.quantity as "Quantity" ) ) ) ) from abc_lineitem_table li where li.order_number = po.order_number ) ) ) as "POXML" from abc_purchase_order_table po; |
现在,是时候生成我们的XML数据了(列表8)。为了供XML应用程序所用,我们可以把XML数据发布为未经格式化的字符串。在你需要结构化输出的时候,“XMLSerialize ”函数可以把XML以适合查看或者打印的格式展现出来。请注意,在我们的例子中,“XMLSerialize ”函数已经把结束标记“Part”元素格式化为“/>”,而不是“”。这两种都被认为是格式良好的XML,因此没有任何技术方面的差异。
列表8:生成XML数据。
-- Unformatted select OBJECT_VALUE as "Purchase Order" from abc_purchase_order_xml_view; Purchase Order <PurchaseOrder><OrderNumber>11111</OrderNumber><OrderDate>2010-01-15</OrderDate><CustomerName>Joe Smith</CustomerName> <User>JSMIT</User><SpecialInstructions>Air Mail</SpecialInstructions><LineItems><LineItem ItemNumber="1"> <Description>Bubble Gum</Description><Part Id="7155" UnitPrice="19.95" Quantity="5"></Part></LineItem> <LineItem ItemNumber="2"><Description>Blow Pops</Description><Part Id="3742" UnitPrice="15.95" Quantity="2"> </Part></LineItem></LineItems></PurchaseOrder> -- Formatted select XMLSerialize(Content OBJECT_VALUE as CLOB indent) as "Purchase Order" from abc_purchase_order_xml_view; Purchase Order ----------------------------------------------------- <PurchaseOrder> <OrderNumber>11111</OrderNumber> <OrderDate>2010-01-15</OrderDate> <CustomerName>Joe Smith</CustomerName> <User>JSMIT</User> <SpecialInstructions>Air Mail</SpecialInstructions> <LineItems> <LineItem ItemNumber="1"> <Description>Bubble Gum</Description> <Part Id="7155" UnitPrice="19.95" Quantity="5"/> </LineItem> <LineItem ItemNumber="2"> <Description>Blow Pops</Description> <Part Id="3742" UnitPrice="15.95" Quantity="2"/> </LineItem> </LineItems> </PurchaseOrder> |
翻译
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。