Наличие перерывов в результате XML при работе в Oracle - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь получить разрывы в своем результате при создании вывода XML из запроса оракула. Правильно знать, что результат в строке.

SELECT  XMLElement("OtherServices", 
          XMLAttributes('201903' AS "ServiceMonth", 
                         'ClientID' AS "Source",
                         'UniqueFile' as "UniqueFileID"),
            XMLForest ( 

            XMLForest (BillingDriver AS "BillingDriver", 
                      Signum   AS "Signum", 
                      Quantity  AS "Quantity",
                      Billable  AS "Billable") AS "Service"


      ))
      FROM CTE ;

Выход

<OtherServices ServiceMonth="201903" Source="ClientID" UniqueFileID="UniqueFile">
  <Service>
    <BillingDriver>Central Mgmt Service</BillingDriver>
    <Signum>SE001_RU0973</Signum>
    <Quantity>1</Quantity>
    <Billable>Yes</Billable>
  </Service>
</OtherServices> 

Что мне нужно получить, это

<OtherServices ServiceMonth="201903" Source ="ClientID" UniqueFileID ="UniqueFile">
   <Service>
      <BillingDriver>ViCS_PV</BillingDriver>
      <Signum-ID>eeditur</Signum-ID>
      <Quantity>1</Quantity>
      <Billable>Yes</Billable>
   </Service>

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете использовать функцию XMLSeralize , чтобы подтвердить ваш результат.В качестве демонстрации с вашим текущим результатом в виде литерала:

select xmlserialize(
  document
  xmltype('<OtherServices ServiceMonth="201903" Source="ClientID" UniqueFileID="UniqueFile"><Service><BillingDriver>Central Mgmt Service</BillingDriver><Signum>SE001_RU0973</Signum><Quantity>1</Quantity><Billable>Yes</Billable></Service></OtherServices>')
  indent size=2
) as result
from dual;

RESULT                                                                               
-------------------------------------------------------------------------------------
<OtherServices ServiceMonth="201903" Source="ClientID" UniqueFileID="UniqueFile">
  <Service>
    <BillingDriver>Central Mgmt Service</BillingDriver>
    <Signum>SE001_RU0973</Signum>
    <Quantity>1</Quantity>
    <Billable>Yes</Billable>
  </Service>
</OtherServices>

Так что вы можете сделать:

SELECT  XMLSERIALIZE(document
          XMLElement("OtherServices", 
            XMLAttributes('201903' AS "ServiceMonth", 
                           'ClientID' AS "Source",
                           'UniqueFile' as "UniqueFileID"),
              XMLForest ( 
                XMLForest (BillingDriver AS "BillingDriver", 
                          Signum   AS "Signum", 
                          Quantity  AS "Quantity",
                          Billable  AS "Billable") AS "Service"
        ))
      indent size=2)
      FROM CTE ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...