Pregunta

Tengo que generar documentos XML en PL / SQL a partir de algunas tablas en Oracle. Nunca he hecho esto antes, y he descubierto que parece haber algunas formas principales de hacerlo:

  • API xmldom
  • funciones xml (como xmlelement, xmlagg, xmlroot)
  • funciones dbms_xmlgen

Hay 65 tablas a las que se hará referencia para generar un solo documento, y tendré que validar el resultado en un xsd. Los documentos se generarán en un lote (en lugar de bajo demanda). No sé si eso marca la diferencia. Usando Oracle 10g.

Inicialmente me estaba inclinando hacia el uso del paquete xmldom, ya que parecía más flexible, pero tengo problemas para encontrar buenos ejemplos o documentación, mientras que las funciones xml parecen estar mejor documentadas y, en general, son más populares. ¿Hay alguna razón para esto?

¿Qué enfoque recomiendan generalmente las personas para este tipo de tarea?

¿Fue útil?

Solución

En mi experiencia, DBMS_XMLGEN es bueno para traducciones rápidas y sucias de datos a xml, pero nunca me ha gustado mucho porque tienes que pasar el SQL como una cadena. Además, su control sobre los nombres de elementos y la estructura ROWSET / ROW está severamente limitado.

Las funciones XML son extremadamente útiles, y mi favorito, si se trata de estructuras relativamente simples. Una vez que entras en múltiples niveles de XMLAgg, por ejemplo, encuentro que se convierte rápidamente en un desastre confuso.

XMLDOM es la forma más flexible de generar XML, especialmente si la estructura es más compleja o si hay una lógica iterativa involucrada. El principal inconveniente aquí es que es esencialmente un contenedor alrededor del DOM de Java donde la mayoría de los métodos aceptan una entrada DOMNode, pero PL / SQL no admite el polimorfismo directamente, por lo que terminas con una gran cantidad de conversiones explícitas entre DOMElement y DOMNode y viceversa, etc. Generalmente, creo mi propio paquete de procedimientos sobrecargados para encapsular todo esto y hacer que sea un poco menos doloroso trabajar con él.

Otros consejos

Bueno, nunca usé Oracle para generar un documento XML muy complejo, pero usar DBMS_XMLDOC es bastante fácil.

Puede ver un esqueleto aquí (y aquí , solo el código pl / sql). También use Google Code Search, seguramente hay algo más que encontrar.
Luego está la DBMS_XMLDOM reference que ayuda incluso si la documentación es bastante seca.

Asegúrese de leer también estas dos publicaciones:
http://www.liberidu.com/blog/?p=365 < br> http://www.liberidu.com/blog/?p=369

Alternativamente, puede buscar generar XML utilizando un procedimiento almacenado en Java.

Generalmente uso las funciones xml ( XMLElement , XMLForest , etc.) porque tengo control sobre el XSD. Hago que el XSD generalmente coincida con la estructura de los documentos, por lo que las cosas coinciden muy bien.

Si el esquema con el que intenta trabajar es excepcionalmente complejo o funky , debe considerar los métodos DBMS_XMLGEN o DOM .

Aquí hay una buena discusión de algunas opciones disponibles para usted:

http: // asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4980337843276

También si busca "Sean Dillon" en AskTom obtendrá una buena colección de artículos que detallan diversos problemas y soluciones que utilizan XML dentro de Oracle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top