Pergunta

Eu tenho que gerar documentos XML em PL / SQL de algumas tabelas em Oracle. Eu nunca fiz isso antes, e eu encontrei parece haver algumas maneiras principais de fazer isso:

  • XMLDOM API
  • funções xml (tais como XmlElement, XMLAgg, XmlRoot)
  • funções dbms_xmlgen

Existem 65 tabelas que serão referenciados para gerar um único documento, e eu vou ter para validar a saída contra um XSD. Os documentos serão gerados em um lote (em vez de on-demand) - Eu não sei se isso faz a diferença. Usando Oracle 10g.

Eu estava inicialmente inclinado a usar o pacote XMLDOM como parecia mais flexível, mas estou tendo bons exemplos Encontrando problemas ou documentação para ele, enquanto que as funções XML parecer melhor documentado e geralmente mais popular. Existe uma razão para isso?

O que se aproximam as pessoas geralmente recomendam para este tipo de tarefa?

Foi útil?

Solução

Na minha experiência, DBMS_XMLGEN é bom para traduções rápidas e sujas de dados para XML, mas eu nunca gostei muito porque você tem que passar o SQL como uma string. Além disso, o seu controle sobre os nomes dos elementos e ROWSET estrutura / ROW é severamente limitada.

As funções XML são extremamente úteis, e meu favorito, se você está lidando com estruturas relativamente simples. Uma vez que você entrar em múltiplos níveis XMLAgg, por exemplo, acho que é recai rapidamente em uma confusão.

XMLDOM é a forma mais flexível para gerar XML, especialmente se a estrutura é mais complexa ou há lógica iterativa envolvidos. A principal desvantagem é que a sua essencialmente um invólucro em torno do Java DOM onde a maioria dos métodos de aceitar uma entrada DOMNode, mas PL / SQL faz polimorfismo não suporte diretamente, assim você acaba com um monte de conversões explícitas entre DOMElement e DOMNode e vice-versa, etc. Geralmente eu criar o meu próprio pacote de procedimentos sobrecarregados para encapsular tudo isso e torná-lo um pouco menos dolorosa para trabalhar.

Outras dicas

Bem, eu nunca usei Oracle para gerar qualquer documento XML muito complexo, mas usando DBMS_XMLDOC é bastante fácil.

Você pode ver um esqueleto aqui (e aqui , apenas o pl / sql código). Também usar o Google Code Search, há certamente algo mais para encontrar.
Depois, há o referência DBMS_XMLDOM que ajuda mesmo que a documentação é bastante seco.

Certifique-se também ler estas duas mensagens:
http://www.liberidu.com/blog/?p=365 < br> http://www.liberidu.com/blog/?p=369

Como alternativa, você pode olhar para a geração de XML usando um procedimento armazenado Java.

I geralmente utilizar as funções xml (XMLElement, XMLForest, etc.) porque tem controlo sobre o XSD. Eu faço o XSD geralmente corresponder à estrutura dos documentos, assim que as coisas corresponder muito bem juntos.

Se o esquema que você está tentando trabalhar com é excepcionalmente complexa ou funk você deve considerar os métodos DBMS_XMLGEN ou DOM.

Aqui está uma boa discussão de algumas opções disponíveis para você:

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

Além disso, se você procurar por "Sean Dillon" na AskTom você vai ter uma boa coleção de artigos detalhando vários problemas e soluções usando XML dentro do Oracle.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top