oracle xml数据类型常见操作

xml数据类型名称为:XMLType;

如果此数据类型列在pl/sql查询时无法显示(比如用"*"查询的时候),可用ip_switchstates.getclobval()来查(ip_switchs为xml类型列);

--需要了解细节的通知可以到下面网站去看看,里边有各个方法的语法和主意事项
--http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb04cre.htm#i1030920

-- 创建一个表
CREATE TABLE table_with_xml_column (filename VARCHAR2 ( 64 ), xml_document XMLType);
-- 向表中插入数据
INSERT INTO table_with_xml_column VALUES ( ' test ' ,XMLType( ' <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd"> <Reference>SBELL-2002100912333601PDT</Reference> <Actions> <Action> <User>SVOLLMAN</User> </Action> </Actions> <Reject/> <Requestor>Sarah J. Bell</Requestor> <User>SBELL</User> <CostCenter>S30</CostCenter> <ShippingInstructions> <name>Sarah J. Bell</name> <address>400 Oracle Parkway Redwood Shores CA 94065 USA</address> <telephone>650 506 7400</telephone> </ShippingInstructions> <SpecialInstructions>Air Mail</SpecialInstructions> <LineItems> <LineItem ItemNumber="1"> <Description>A Night to Remember</Description> <Part Id="715515009058" UnitPrice="39.95" Quantity="2"/> </LineItem> <LineItem ItemNumber="2"> <Description>The Unbearable Lightness Of Being</Description> <Part Id="37429140222" UnitPrice="29.95" Quantity="2"/> </LineItem> <LineItem ItemNumber="3"> <Description>Sisters</Description> <Part Id="715515011020" UnitPrice="29.95" Quantity="4"/> </LineItem> </LineItems> </PurchaseOrder> ' )); INSERT INTO table_with_xml_column VALUES ( ' test ' ,XMLType( ' <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd"> <Reference>SBELL-2002100912333601PDT</Reference> <Actions> <Action> <User>SVOLLMAN</User> </Action> </Actions> <Reject/> <Requestor>Sarah J. Bell</Requestor> <User>SBELL</User> <CostCenter>S30</CostCenter> <ShippingInstructions> <name>Sarah J. Bell</name> <address>400 Oracle Parkway Redwood Shores CA 94065 USA</address> <telephone>650 506 7400</telephone> </ShippingInstructions> <SpecialInstructions>Air Mail</SpecialInstructions> <LineItems> <LineItem ItemNumber="1"> <Description>A Night to Remember</Description> <Part Id="715515009058" UnitPrice="39.95" Quantity="2"/> </LineItem> <LineItem ItemNumber="2"> <Description>The Unbearable Lightness Of Being</Description> <Part Id="37429140222" UnitPrice="29.95" Quantity="2"/> </LineItem> <LineItem ItemNumber="3"> <Description>Sisters</Description> <Part Id="715515011020" UnitPrice="29.95" Quantity="4"/> </LineItem> </LineItems> </PurchaseOrder> ' ));
-- 查询某个节点是否存在的方法
SELECT xml_document FROM table_with_xml_column WHERE XMLExists( ' //Part[@Id="715515011020"] ' -- xpath查询语法 PASSING xml_document);
SELECT xml_document FROM table_with_xml_column WHERE existsNode(xml_document, ' //Part[@Id="715515011020"] ' ) = 1 ;
  -- 获取部分节点
SELECT extract(xml_document, ' //Part[@Id="715515011020"] ' ) "Part" FROM table_with_xml_column WHERE existsNode(xml_document, ' //Part[@Id="715515011020"] ' ) = 1 ;
SELECT extract(xml_document, ' //telephone/text() ' ) "Part" FROM table_with_xml_column WHERE existsNode(xml_document, ' //Part[@Id="715515011020"] ' ) = 1 ;
-- 获取部分数据
extract().getStringVal() or extract().getnumberval(). SELECT extract(xml_document, ' //address ' ).getStringVal() FROM table_with_xml_column WHERE XMLExists( ' /PurchaseOrder ' PASSING xml_document); SELECT extractValue(xml_document, ' //address ' ) FROM table_with_xml_column WHERE XMLExists( ' /PurchaseOrder ' PASSING xml_document); SELECT XMLCast(XMLQuery( ' //address ' PASSING xml_document RETURNING CONTENT) AS VARCHAR2 ( 100 )) "REFERENCE" FROM table_with_xml_column WHERE XMLExists( ' /PurchaseOrder ' PASSING xml_document);
  -- 更新整个文档
UPDATE table_with_xml_column SET xml_document = XMLType( ' <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd"> <Reference>SBELL-2002100912333601PDT</Reference> <Actions> <Action> <User>SVOLLMAN</User> </Action> </Actions> <Reject/> <Requestor>Sarah J. Bell</Requestor> <User>SBELL</User> <CostCenter>S30</CostCenter> <ShippingInstructions> <name>Sarah J. Bell</name> <address>400 Oracle Parkway Redwood Shores CA 94065 USA</address> <telephone>650 506 7400</telephone> </ShippingInstructions> <SpecialInstructions>Air Mail</SpecialInstructions> <LineItems> <LineItem ItemNumber="1"> <Description>A Night to Remember</Description> <Part Id="715515009058" UnitPrice="39.95" Quantity="2"/> </LineItem> <LineItem ItemNumber="2"> <Description>The Unbearable Lightness Of Being</Description> <Part Id="37429140222" UnitPrice="29.95" Quantity="2"/> </LineItem> <LineItem ItemNumber="3"> <Description>Sisters</Description> <Part Id="715515011020" UnitPrice="29.95" Quantity="4"/> </LineItem> </LineItems> </PurchaseOrder> ' ) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- updateXML 更新xml中单个数据
-- 先查看一下
SELECT extract(xml_document, ' /PurchaseOrder/Actions/Action[1]/User/text() ' ).getStringVal() ACTION FROM table_with_xml_column WHERE existsNode(xml_document, ' /PurchaseOrder[Reference="SBELL-2002100912333601PDT"] ' ) = 1 ;
  -- 更新数据
UPDATE table_with_xml_column SET xml_document = updateXML(xml_document, ' /PurchaseOrder/Actions/Action[1]/User/text() ' , ' SKING ' ) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- 更新多个数据节点 -- 先查看一下
SELECT extractValue(xml_document, ' /PurchaseOrder/Requestor ' ) NAME, extract(xml_document, ' /PurchaseOrder/LineItems ' ).getStringVal() LINEITEMS FROM table_with_xml_column WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- 更新多条数据
UPDATE table_with_xml_column SET xml_document = updateXML(xml_document, ' /PurchaseOrder/Requestor/text() ' , ' Stephen G. King ' , ' /PurchaseOrder/LineItems/LineItem[1]/Part/@Id ' , ' 786936150421 ' , ' /PurchaseOrder/LineItems/LineItem[1]/Description/text() ' , ' The Rock ' , ' /PurchaseOrder/LineItems/LineItem[3] ' , XMLType( ' <LineItem ItemNumber="99"> <Description>Dead Ringers</Description> <Part Id="715515009249" UnitPrice="39.95" Quantity="2"/> </LineItem> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- 节点赋值为空的效果
UPDATE table_with_xml_column SET xml_document = updateXML( xml_document, ' /PurchaseOrder/LineItems/LineItem[Part/@Id="715515009058"]/Description ' , NULL , ' /PurchaseOrder/LineItems/LineItem/Part[@Id="715515009058"]/@Quantity ' , NULL , ' /PurchaseOrder/LineItems/LineItem[Description/text()="The Unbearable Lightness Of Being"] ' , NULL ) WHERE existsNode(xml_document, ' /PurchaseOrder[Reference="SBELL-2002100912333601PDT"] ' ) = 1 ;
-- 数据节点赋值为空的效果
UPDATE table_with_xml_column SET xml_document = updateXML(xml_document, ' /PurchaseOrder/LineItems/LineItem/Part[@Description="A Night to Remember"]/text() ' , NULL ) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- insertChildXML
SELECT extract(xml_document, ' /PurchaseOrder/LineItems ' ) FROM table_with_xml_column WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
  UPDATE table_with_xml_column SET xml_document = insertChildXML(xml_document, ' /PurchaseOrder/LineItems ' , ' LineItem ' , XMLType( ' <LineItem ItemNumber="99999"> <Description>The Harder They Come</Description> <Part Id="953562951413" UnitPrice="22.95" Quantity="1"/> </LineItem> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- insertChildXMLbefore
UPDATE table_with_xml_column SET xml_document = insertChildXMLbefore (xml_document, ' /PurchaseOrder/LineItems ' , ' LineItem ' , XMLType( ' <LineItem ItemNumber="1111"> <Description>The Harder They Come</Description> <Part Id="953562951413" UnitPrice="22.95" Quantity="1"/> </LineItem> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
  -- insertChildXMLafter
UPDATE table_with_xml_column SET xml_document = insertChildXMLafter (xml_document, ' /PurchaseOrder/LineItems ' , ' LineItem ' , XMLType( ' <LineItem ItemNumber="3333"> <Description>The Harder They Come</Description> <Part Id="953562951413" UnitPrice="22.95" Quantity="1"/> </LineItem> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- insertXMLbefore
UPDATE table_with_xml_column SET xml_document = insertXMLbefore(xml_document, ' /PurchaseOrder/LineItems/LineItem[1] ' , XMLType( ' <LineItem ItemNumber="314"> <Description>Brazil</Description> <Part Id="314159265359" UnitPrice="69.95" Quantity="2"/> </LineItem> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- insertXMLafter
UPDATE table_with_xml_column SET xml_document = insertXMLafter(xml_document, ' /PurchaseOrder/LineItems/LineItem[1] ' , XMLType( ' <LineItem ItemNumber="314"> <Description>Brazil</Description> <Part Id="314159265359" UnitPrice="69.95" Quantity="2"/> </LineItem> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- appendChildXML
UPDATE table_with_xml_column SET xml_document = appendChildXML(xml_document, ' /PurchaseOrder/Actions/Action[1] ' , XMLType( ' <Date>2002-11-04</Date> ' )) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
-- deleteXML
  UPDATE table_with_xml_column SET xml_document = deleteXML(xml_document, ' /PurchaseOrder/LineItems/LineItem[@ItemNumber="2222"] ' ) WHERE existsNode(xml_document, ' /PurchaseOrder ' ) = 1 ;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值