Oracle11g ORA-00932:不一致的数据类型:预期-获取CLOB-从CLOB列获取XML

Oracle11g ORA-00932:不一致的数据类型:预期-获取CLOB-从CLOB列获取XML,oracle11g,ora-00932,Oracle11g,Ora 00932,我将此XML存储在CLOB列中: <SvcData><Status><StatusCode>EXI</StatusCode><StatusDesc></StatusDesc><StatusCodeAlt>000000</StatusCodeAlt><StatusDescAlt>OK</StatusDescAlt><StatusCodeHost></Status

我将此XML存储在CLOB列中:

<SvcData><Status><StatusCode>EXI</StatusCode><StatusDesc></StatusDesc><StatusCodeAlt>000000</StatusCodeAlt><StatusDescAlt>OK</StatusDescAlt><StatusCodeHost></StatusCodeHost><StatusCodeHostSeverity>OK</StatusCodeHostSeverity><StatusCodeError>000000</StatusCodeError></Status><ConnectorResponse><ModuleResponse>
  <statusCode>000000</statusCode>
  <messageError/>
  <concreteReturn class="net.excelsys.delivery.icbs.base.dto.IcbsPreviousDataDTO">
    <previousData class="net.excelsys.delivery.icbs.base.dto.IcbsPreviousDataDTO$HolderDTO">
      <content class="ClientLimitAmountDTO">
        <services>
          <ClientLimitAmountServiceDTO>
            <serviceId>210640</serviceId>
            <serviceName>Pagos Virtuales</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>false</status>
                <limitAmount>-1.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
          <ClientLimitAmountServiceDTO>
            <serviceId>210733</serviceId>
            <serviceName>Transferencias - Sebra</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>true</status>
                <limitAmount>1000000000.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
          <ClientLimitAmountServiceDTO>
            <serviceId>210643</serviceId>
            <serviceName>Pagos Virtuales PSE</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>true</status>
                <limitAmount>1000000000.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
        </services>
      </content>
    </previousData>
  </concreteReturn>
</ModuleResponse></ConnectorResponse></SvcData>
我有一个错误:

ORA-00932:不一致的数据类型:应为-已获取CLOB 93200000-不一致的数据类型:预期为%s,实际为%s

我需要得到这样的结果:

ServiceID     ServiceName            LimitName     Status     LimitAmount
210640        Pagos Virtuales        TRANSACTION   true       1000000.00
210640        Pagos Virtuales        DAILY         true       100000000.00
210640        Pagos Virtuales        MONTHLY       false      -1.00
210733        Transferencias - Sebra TRANSACTION   true       1000000.00
210733        Transferencias - Sebra DAILY         true       100000000.00
210733        Transferencias - Sebra MONTHLY       true       -1.00
210643        Pagos Virtuales PSE    TRANSACTION   true       1000000.00
210643        Pagos Virtuales PSE    DAILY         true       100000000.00
210643        Pagos Virtuales PSE    MONTHLY       true       -1.00
我怎样才能解决这个问题

感谢您的帮助。

工作解决方案

with LTX_ENGINE_LOGGER
     as (select 
                  '<SvcData><Status><StatusCode>EXI</StatusCode><StatusDesc></StatusDesc><StatusCodeAlt>000000</StatusCodeAlt><StatusDescAlt>OK</StatusDescAlt><StatusCodeHost></StatusCodeHost><StatusCodeHostSeverity>OK</StatusCodeHostSeverity><StatusCodeError>000000</StatusCodeError></Status><ConnectorResponse><ModuleResponse>
  <statusCode>000000</statusCode>
  <messageError/>
  <concreteReturn class="net.excelsys.delivery.icbs.base.dto.IcbsPreviousDataDTO">
    <previousData class="net.excelsys.delivery.icbs.base.dto.IcbsPreviousDataDTO$HolderDTO">
      <content class="ClientLimitAmountDTO">
        <services>
          <ClientLimitAmountServiceDTO>
            <serviceId>210640</serviceId>
            <serviceName>Pagos Virtuales</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>false</status>
                <limitAmount>-1.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
          <ClientLimitAmountServiceDTO>
            <serviceId>210733</serviceId>
            <serviceName>Transferencias - Sebra</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>true</status>
                <limitAmount>1000000000.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
          <ClientLimitAmountServiceDTO>
            <serviceId>210643</serviceId>
            <serviceName>Pagos Virtuales PSE</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>true</status>
                <limitAmount>1000000000.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
        </services>
      </content>
    </previousData>
  </concreteReturn>
</ModuleResponse></ConnectorResponse></SvcData>'
                  DATA_RECV
           from dual)
     select q.ServiceId, q.ServiceName, s.*
       from LTX_ENGINE_LOGGER LEL
            left join
            xmltable(
              'SvcData/ConnectorResponse/ModuleResponse/concreteReturn/previousData/content/services/ClientLimitAmountServiceDTO'
              passing xmltype(LEL.DATA_RECV)
              columns ServiceId number(10) path 'serviceId'
                    , ServiceName varchar2(1000) path 'serviceName'
                    , limitList xmltype path 'limitList') Q
              on (1 = 1)
            left join
            xmltable(
              '/limitList/LimitTypeDTO'
              passing Q.limitList
              columns LimitName varchar2(1000) path './limitName'
                    , Status varchar2(1000) path './status'
                    , LimitAmount varchar2(1000) path './limitAmount') S
              on (1 = 1)
工作解决方案

with LTX_ENGINE_LOGGER
     as (select 
                  '<SvcData><Status><StatusCode>EXI</StatusCode><StatusDesc></StatusDesc><StatusCodeAlt>000000</StatusCodeAlt><StatusDescAlt>OK</StatusDescAlt><StatusCodeHost></StatusCodeHost><StatusCodeHostSeverity>OK</StatusCodeHostSeverity><StatusCodeError>000000</StatusCodeError></Status><ConnectorResponse><ModuleResponse>
  <statusCode>000000</statusCode>
  <messageError/>
  <concreteReturn class="net.excelsys.delivery.icbs.base.dto.IcbsPreviousDataDTO">
    <previousData class="net.excelsys.delivery.icbs.base.dto.IcbsPreviousDataDTO$HolderDTO">
      <content class="ClientLimitAmountDTO">
        <services>
          <ClientLimitAmountServiceDTO>
            <serviceId>210640</serviceId>
            <serviceName>Pagos Virtuales</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>false</status>
                <limitAmount>-1.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
          <ClientLimitAmountServiceDTO>
            <serviceId>210733</serviceId>
            <serviceName>Transferencias - Sebra</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>true</status>
                <limitAmount>1000000000.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
          <ClientLimitAmountServiceDTO>
            <serviceId>210643</serviceId>
            <serviceName>Pagos Virtuales PSE</serviceName>
            <limitList>
              <LimitTypeDTO>
                <limitName>TRANSACTION</limitName>
                <status>true</status>
                <limitAmount>1000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>DAILY</limitName>
                <status>true</status>
                <limitAmount>100000000.00</limitAmount>
              </LimitTypeDTO>
              <LimitTypeDTO>
                <limitName>MONTHLY</limitName>
                <status>true</status>
                <limitAmount>1000000000.00</limitAmount>
              </LimitTypeDTO>
            </limitList>
          </ClientLimitAmountServiceDTO>
        </services>
      </content>
    </previousData>
  </concreteReturn>
</ModuleResponse></ConnectorResponse></SvcData>'
                  DATA_RECV
           from dual)
     select q.ServiceId, q.ServiceName, s.*
       from LTX_ENGINE_LOGGER LEL
            left join
            xmltable(
              'SvcData/ConnectorResponse/ModuleResponse/concreteReturn/previousData/content/services/ClientLimitAmountServiceDTO'
              passing xmltype(LEL.DATA_RECV)
              columns ServiceId number(10) path 'serviceId'
                    , ServiceName varchar2(1000) path 'serviceName'
                    , limitList xmltype path 'limitList') Q
              on (1 = 1)
            left join
            xmltable(
              '/limitList/LimitTypeDTO'
              passing Q.limitList
              columns LimitName varchar2(1000) path './limitName'
                    , Status varchar2(1000) path './status'
                    , LimitAmount varchar2(1000) path './limitAmount') S
              on (1 = 1)

传递LEL.DATA\u RECV->传递xmltypeLEL.DATA\u RECV。在第一个xmltable语句中。Oracle不会在clob和xmltype之间进行自动转换。谢谢@ArkadiuszŁukasiewicz。我修改了关于我想要得到的结果的原始帖子。您的提示很有效,但我有很多行作为结果:传递LEL.DATA\u RECV->传递xmltypeLEL.DATA\u RECV。在第一个xmltable语句中。Oracle不会在clob和xmltype之间进行自动转换。谢谢@ArkadiuszŁukasiewicz。我修改了关于我想要得到的结果的原始帖子。你的建议行得通,但我有很多行,因此:谢谢。现在它工作了,我得到了我想要的结果。谢谢。现在它工作了,我得到了我想要的结果。