2014-10-25 10 views
0

Я хочу удалить узел из XML в Oracle. Я столкнулся с проблемой при удалении узла:Как удалить узел из XML в Oracle?

Ниже мой XML:

</TRB_TRX> 
<DATA> 
     <Request APIType="null"> 
      <SubscriberIdsInfo> 
       <ExternalId> 
        <ExternalId>8034204058</ExternalId> 
       </ExternalId> 
       <SubscriberId> 
        <SubscrNumber/> 
       </SubscriberId> 
      </SubscriberIdsInfo> 
      <Services> 
       <Soc>88371664</Soc> 
       <ServiceAgreementSequenceNo/> 
       <DealerCode/> 
       <DeployMode/> 
       <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
       <ExpirationDate/> 
       <OfferInstanceId/> 
      </Services> 
      <Services> 
       <Soc>911143659</Soc> 
       <ServiceAgreementSequenceNo/> 
       <DealerCode/> 
       <DeployMode/> 
       <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
       <ExpirationDate/> 
       <OfferInstanceId/> 
      </Services> 
      <Services> 
       <Soc>42132</Soc> 
       <ServiceAgreementSequenceNo/> 
       <DealerCode/> 
       <DeployMode/> 
       <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
       <ExpirationDate/> 
       <OfferInstanceId/> 
      </Services> 
      <SubParameters> 
       <Name>PoolID</Name> 
       <Values>B287024769280MDVCPOOL</Values> 
       <EffectiveDate>2014-10-16T14:08:37</EffectiveDate> 
       <ExpirationDate/> 
      </SubParameters> 
      <ActivityInfo/> 
     </Request> 
    </DATA> 
</TRB_TRX> 

Я хочу удалить ниже

<Services> 
       <Soc>88371664</Soc> 
       <ServiceAgreementSequenceNo/> 
       <DealerCode/> 
       <DeployMode/> 
       <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
       <ExpirationDate/> 
       <OfferInstanceId/> 
      </Services> 
      <Services> 

и

<Services> 
        <Soc>88371664</Soc> 
        <ServiceAgreementSequenceNo/> 
        <DealerCode/> 
        <DeployMode/> 
        <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
        <ExpirationDate/> 
        <OfferInstanceId/> 
       </Services> 
       <Services> 

мой последний выход должен как ниже

</TRB_TRX> 
     <DATA> 
      <Request APIType="null"> 
       <SubscriberIdsInfo> 
        <ExternalId> 
         <ExternalId>8034204058</ExternalId> 
        </ExternalId> 
        <SubscriberId> 
         <SubscrNumber/> 
        </SubscriberId> 
       </SubscriberIdsInfo> 
       <Services> 
        <Soc>911143659</Soc> 
        <ServiceAgreementSequenceNo/> 
        <DealerCode/> 
        <DeployMode/> 
        <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
        <ExpirationDate/> 
        <OfferInstanceId/> 
       </Services> 
       <SubParameters> 
        <Name>PoolID</Name> 
        <Values>B287024769280MDVCPOOL</Values> 
        <EffectiveDate>2014-10-16T14:08:37</EffectiveDate> 
        <ExpirationDate/> 
       </SubParameters> 
       <ActivityInfo/> 
      </Request> 
     </DATA> 
    </TRB_TRX> 

Я использую ниже SQL запроса

UPDATE trb1_sub_errs SET general_data = deleteXML(general_data,'//DATA/Request/Services[1]') where SUB_TRX_ID=1242403029; 

Ниже ошибки я получаю

ERROR at line 1: 
ORA-00932: inconsistent datatypes: expected - got CHAR 
+0

Можете ли вы опубликовать сеанс из SQL * Plus точно так же, как я показал. Измените свой вопрос и скопируйте сеанс. А также укажите точную версию до четырех десятичных знаков. –

ответ

0

Я не вижу никакой ошибки. Единственное отличие заключается в том, что у меня нет никакого предиката в запросе.

SQL> CREATE TABLE trb1_sub_ers AS 
    2 select XMLTYPE('<TRB_TRX> 
    3 <DATA> 
    4   <Request APIType="null"> 
    5    <SubscriberIdsInfo> 
    6     <ExternalId> 
    7      <ExternalId>8034204058</ExternalId> 
    8     </ExternalId> 
    9     <SubscriberId> 
10      <SubscrNumber/> 
11     </SubscriberId> 
12    </SubscriberIdsInfo> 
13    <Services> 
14     <Soc>88371664</Soc> 
15     <ServiceAgreementSequenceNo/> 
16     <DealerCode/> 
17     <DeployMode/> 
18     <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
19     <ExpirationDate/> 
20     <OfferInstanceId/> 
21    </Services> 
22    <Services> 
23     <Soc>911143659</Soc> 
24     <ServiceAgreementSequenceNo/> 
25     <DealerCode/> 
26     <DeployMode/> 
27     <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
28     <ExpirationDate/> 
29     <OfferInstanceId/> 
30    </Services> 
31    <Services> 
32     <Soc>42132</Soc> 
33     <ServiceAgreementSequenceNo/> 
34     <DealerCode/> 
35     <DeployMode/> 
36     <EffectiveDate>2014-10-16T00:00:00</EffectiveDate> 
37     <ExpirationDate/> 
38     <OfferInstanceId/> 
39    </Services> 
40    <SubParameters> 
41     <Name>PoolID</Name> 
42     <Values>B287024769280MDVCPOOL</Values> 
43     <EffectiveDate>2014-10-16T14:08:37</EffectiveDate> 
44     <ExpirationDate/> 
45    </SubParameters> 
46    <ActivityInfo/> 
47   </Request> 
48  </DATA> 
49 </TRB_TRX>') general_data from dual; 

Table created. 

SQL> 
SQL> UPDATE trb1_sub_ers SET general_data = deleteXML(general_data, '//DATA/Request/Services[1]'); 

1 row updated. 

SQL> 

Таким образом, проверьте тип данных SUB_TRX_ID, это строка, так как вы сравниваете число.

+0

Lalit, я все еще вижу ту же ошибку SQL> UPDATE trb1_sub_errs SET general_data = deleteXML (general_data, '// DATA/Request/Services [1]'); UPDATE trb1_sub_errs SET general_data = deleteXML (general_data, '// DATA/Запрос/Услуги [1]) * ОШИБКА в строке 1: ORA-00932: несовместимые типы данных: ожидалось - получил CHAR –

+0

Вы можете разместить сессию SQL * Plus так же, как я показал. А также укажите точную версию до четырех десятичных знаков. –

+0

SQL * Plus: Release 11.2.0.3.0 –

Смежные вопросы