2016-03-07 65 views
2

是否可以在XML数据库中的XML中插入新标签?在xmlDB中以XML格式插入新标签

例如;下面是我的例子是存在于数据库中:

<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> 
    <SpecialInstructions>Air Mail</SpecialInstructions> 
    <LineItems> 
    <LineItem ItemNumber="1"> 
     <Description>A Night to Remember</Description> 
     <Part Id="715515009058" UnitPrice="39.95" Quantity="2"/> 
    </LineItem> 
    </LineItems> 
</PurchaseOrder> 

我需要插入新的标签<sender>xxxx</sender>其中<costCente>为“S30”。

插入/更新XML后,它应该是象下面这样:

<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> 
    <sender>xxx</sender> 
    <Actions> 
    <Action> 
     <User>SVOLLMAN</User> 
    </Action> 
    </Actions> 
    <Reject/> 
    <Requestor>Sarah J. Bell</Requestor> 
    <User>SBELL</User> 
    <CostCenter>S30</CostCenter> 
    <SpecialInstructions>Air Mail</SpecialInstructions> 
    <LineItems> 
    <LineItem ItemNumber="1"> 
     <Description>A Night to Remember</Description> 
     <Part Id="715515009058" UnitPrice="39.95" Quantity="2"/> 
    </LineItem> 
    </LineItems> 
</PurchaseOrder> 

难道真的有一个可能的方案?

任何一个可以给我查询来做到这一点,如果可能的话。

在此先感谢。

回答

0

下面的查询为我工作。

UPDATE TABLENAME dd SET dd.object_value = 
insertXMLbefore(dd.object_value, 
'/c:PurchaseOrder/c:Reference', 
XMLType('<d:sender xmlns:d="http://www.w3.org/2001/XMLSchema-instance">XXXX</d:sender>'), 
xmlns:c="http://www.w3.org/2001/XMLSchema-instance"') 
WHERE dd.id in (SELECT dd.id FROM TABLENAME dd,XMLTable(XMLNAMESPACES(
DEFAULT 'http://www.w3.org/2001/XMLSchema-instance' AS "c"), 
'/PurchaseOrder' PASSING dd.object_value COLUMNS sender VARCHAR2(8 CHAR) PATH 'c:PurchaseOrder/c:Reference/text()', 
rp VARCHAR2(8 CHAR) PATH 'CostCenter/text()') li 
WHERE sender is null and rp = 'S30');