Renato, sério cara, não faça top-posting, veja as regras da lista: http://www.postgresql.org.br/RegrasLista
É simples, basta editar a mensagem antes de responder, e ir respondendo embaixo da mensagem anterior, como vou fazer a seguir: 2014-02-20 11:24 GMT-03:00 Renato Poleti <[email protected]>: > Matheus, eu verifiquei estas funções, mas não conseguir chegar a uma > solução de looping no XML. > Imagina que tenha uma function que recebe como parâmetro o seguinte XML > > <?xml version="1.0? encoding="UTF-8??> > <items> > <item> > <name color="brown">Chair</name> > <price>$53</price> > </item> > <item> > <name color="red">Table Lamp</name> > <price>$10</price> > </item> > </items> > > Preciso saber: > a) Quantos itens eu tem. > b) Pegar cada item e fazer um insert em determina tabela (o problema está > no looping) > > Lembrando que pode vir 1 item, como varios itens. > > Agora sim, posso ajudar melhor... Vamos assumir que tenhas uma função assim: CREATE FUNCTION process_item(data xml) RETURNS TABLE(name text, color text, price text) ... E ela pega o dado passado via parâmetro e retorna uma linha para cada item, retornando name, color e price. O corpo dessa função é bem simples nesse caso. Na verdade nem precisava de uma função, bastava a seguinte query (que seria também o corpo da função em linguagem SQL): SELECT (xpath('/item/name[1]/text()', item))[1]::text AS name, (xpath('/item/name[1]/@color', item))[1]::text AS color, (xpath('/item/price[1]/text()', item))[1]::text AS price FROM unnest(xpath('/items/item', data)) t(item); Com isso em mãos, você tem as suas respostas: a) SELECT count(*) FROM process_item('seu xml'); b) SELECT count(*) FROM process_item('seu xml'); Claro que para (a) tem formas mais performáticas. Resumindo, estude queries XPath, é a forma mágica de processar XML. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
