может кто-нибудь, пожалуйста, помогите, как добавить ресурс массива в XML (CLOB) с помощью SQL?

#sql #xml #oracle #clob

#sql #xml #Oracle #clob

Вопрос:

 <?xml version="1.0" encoding="UTF-8"?>
<Values version="2.0">
  <record name="header" javaclass="com.wm.util.Values">
    <value name="legalEntity">27</value>
    <value name="globalId">a8a49f5d-70bb-421e-99f2-bb4065a46538</value>
    <value name="priority">5</value>
    <value name="requestor">COP</value>
  </record>
  <record name="body" javaclass="com.wm.util.Values">
    <array name="orderItem" type="record" depth="1">
      <record javaclass="com.wm.util.Values">
        <value name="orderItemId">OS-1229460</value>
        <array name="childOrderItem" type="record" depth="1">
          <record javaclass="com.wm.util.Values">
            <value name="orderItemId">280973171</value>
            <array name="relatedOrderItem" type="record" depth="1">
              <record javaclass="com.wm.util.Values">
                <value name="orderType">CUSTOMER_ORDER</value>
                <value name="orderItemId">280973171</value>
                <value name="orderItemDataOwner">Clarify</value>
              </record>
            </array>
            <value name="operationType">CANCEL</value>
            <value name="operationSubType">DEFAULT</value>
            <value name="status"> </value>
            <value name="subStatus"> </value>
            <value name="orderItemDateTime">2020-12-08T17:00:52</value>
            <value name="articleNumber">STANDAARDSIMKAART</value>
           
            <array name="childOrderItem" type="record" depth="1">
              <record javaclass="com.wm.util.Values">
                <value name="orderItemId">280973179</value>
                <value name="operationType">CANCEL</value>
                <value name="operationSubType">DEFAULT</value>
                <value name="status"> </value>
                <value name="subStatus"> </value>
                <record name="product" javaclass="com.wm.util.Values">
                  <value name="productInstanceId">280973179</value>
                  <value name="productSpecificationId">SE555</value>
                  <value name="productSpecificationName">PRIVATE_APN</value>
                  <value name="productDescription">PRIVATE_APN</value>
                  <value name="productType">PRIVATE_APN</value>
                  <value name="manualOverride">false</value>
                </record>
              </record>
            </array>
          </record>
        </array>
      </record>
    </array>
  </record>
</Values>

 

Чтобы быть более точным, я должен добавить этот ресурс массива после строки ручного переопределения

        <array name="productInstanceCharacterstic" type="record" depth="1">
                   <record javaclass="com.wm.util.Values">
                     <value name="name">APNProductInstanceID</value>
                     <value name="value">281606343</value>
                   </record>
                   <record javaclass="com.wm.util.Values">
                     <value name="name">UseStaticIP</value>
                     <value name="value">No</value>
                   </record>
                 </array>

 

Мой код :

 UPDATE SD2_95.ORDER_DATA sgo SET sgo.ORDER_CONTENT =
(XMLSERIALIZE
(
  Document
  (
    XMLQuery
    (
      'copy $tmp := . modify  
      (for $i in $tmp//record[@name="body"]/value[@name=]/text()
      
      return $tmp'
      PASSING XMLTYPE(sgo.ORDER_CONTENT) RETURNING CONTENT
    )
    
  ) AS CLOB INDENT SIZE = 2
)
)
WHERE sgo.ORDER_ID IN
(
'OS-1151955',

)
 

Я не уверен, как реализовать цикл for … пожалуйста, помогите

Комментарии:

1. Откуда берутся дополнительные данные? Я имею в виду, productInstanceCharacterstic добавляется ли это «как есть» (константа или выбирается откуда-то еще) или оно должно быть собрано из какого-либо запроса / таблицы? Вы должны предоставить свою модель для второго случая.