接上文:如何把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> |
翻译
TechTarget特邀编辑。2003年入软件行业,熟悉软件过程所有环节,对机构信息化的各方面有深入理解和实践经验。现就职于某互联网创业公司,目前关注互联网分布式系统架构和机器学习。喜欢传统文化社科哲学(尤喜《周易》、《老子》),喜健身喜抓举(具备抱人引体向上的能力),喜欢中国象棋(具备盲棋1对2的能力)。
相关推荐
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。
-
如何应对Oracle EBS实施中的六个挑战?
在18个月的时间里,Vitamix启动运行了Oracle电子商务套件(E-Business Suite,EBS),而且Vitamix还对诸如Oracle ATG Web Commerce等所有页面属性进行了重新整理,并实现了全球数据中心。
-
Oracle的云产品“砸了自己脚”?
Sparc和Solaris都是Oracle云计划的一部分,但是硬件和支持人员的减少意味着本地Solaris和Sparc将变得更加稀少。
-
2017年3月数据库流行度排行榜 Oracle卫冕之路困难重重
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?