Oracle - Passing XML en Oracle

 
Vista:
Imágen de perfil de Victor
Val: 25
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Passing XML en Oracle

Publicado por Victor (20 intervenciones) el 07/03/2019 14:36:23
Buenos días,

Tengo este XML;
1
2
3
4
5
6
7
8
9
10
11
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:getConsultaOnlineResponse xmlns:ns2="http://service.online.ness.seg.com/">
      <return>
        <codProceso>12</codProceso>
        <codProceso>24</codProceso>
        <fecha>20190307</fecha>
      </return>
    </ns2:getConsultaOnlineResponse>
  </soap:Body>
</soap:Envelope>


Necesito obtener los datos de la etiqueta codProceso, y para eso encontré esta forma;

(En mi BD oracle, creé una tabla dummy con el campo campoxml y guardé alli el xml de arriba)

1
2
3
select xmlserialize(content XMLQuery('//return/codProceso/text()' passing
                             campoxml returning content) as varchar2(10)) codProceso
  from dummy;

El Result de esto es;

1
2
3
CODPROCESO
----------
1224


Es decir me concatena ambos campos 12+24=1224 cuando yo necesito diferenciarlo como registros diferentes aunque pertenezcan a un mismo nombre de campo o etiqueta.

Mi consulta es;
Como puedo obtener los campos por separados ya sea como registro?
ej:
1
2
3
4
CODPROCESO
----------
12
24

o si no se puede como registro, la posibilidad de agregar un separador algo así?
1
2
3
CODPROCESO
----------
12#24

donde # es el separador?


Desde ya gracias por la ayuda!
Saludos,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Passing XML en Oracle

Publicado por Rafael (328 intervenciones) el 07/03/2019 16:00:40
Hola, Victor:

Tu problema es que estas realizando una consulta a distintos NODOS de un mismo ELEMENTO y estos tienen el mismo NOMBRE...
Y lo serializas ... esto hace que el dato quede reunido en una sola cadena.

La forma correcta para separar tu info es usar XMLSQUENCE y no XMLQUERY para obtener el dato, algo tal que asi:

1
2
3
select extract(value(p), '//codProceso/text()').getStringVal() AS codProceso
from   dummy t
     , TABLE(XMLSEQUENCE(EXTRACT(t.campoxml, '//return/codProceso'))) p;

A mi me funciona mira...
http://sqlfiddle.com/#!4/fee01/23


Espero te sirva...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Victor
Val: 25
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Passing XML en Oracle

Publicado por Victor (20 intervenciones) el 07/03/2019 18:13:26
Brillante muchas Gracias Rafael!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar