Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SerraVentura

[Resolvido] MySQL e XML

Recommended Posts

Galera to tentando trabalhar com Mysql manipulando um XML em uma SP, fiz o seguinte teste abaixo, porem queria fazer como fazia no SQL server...

quero tranformar esse XML em uma tabela temporaria pra depois eu poder fazer um INSERT/SELECT das informações...

porém estou tendo o seguinte problema, no exemplo abaixo os dados do XML resultam em apenas 1 registro, quando o correto seriam 2 registros...

 

alguém saberia me dizer como posso fazer ?

 

 use test;

 SET @xml = '<item><id>123</id><ds>aaa</ds></item><item><id>555</id><ds>bbb</ds></item>';
 SELECT ExtractValue(@xml, '//item//id'), ExtractValue(@xml, '//item//ds');

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera consegui, porém se for só dessa maneira q consigo fazer o q quero, vou evitar ao maximo de trabalhar com XML no MySql o q eu fiz aqui, faço em 4 linhas no SQL Server... mas funcinou...

 

DECLARE i                     INT           DEFAULT 1;
  DECLARE intTotal              INT;
  DECLARE idProjetoCorrente     INT           DEFAULT 55;
  DECLARE strValores            VARCHAR(500)  DEFAULT '';
  DECLARE strInsert             VARCHAR(500)  DEFAULT '';


  /*  criando a tabela temporaria para guardar dados do XML  */
  DROP TABLE IF EXISTS `frmCategoriasTemas_TMP`;
  CREATE TEMPORARY TABLE frmCategoriasTemas_TMP(

    id_Categoria_Tema INT,
    id_Projeto        INT,
    ds_Justificativa  VARCHAR(255)

  )TYPE=HEAP;

  -- TOTAL DE NÓS NO XML...
  SET intTotal = ExtractValue(xmlCatTema, 'count(/item)');

  -- MONTA STRING DE INSERTS PARA POSTERIORMENTE INSERIR NA TABELA TEMPORÁRIA...
  WHILE i <= intTotal DO

    SET strValores = CONCAT(strValores, ExtractValue(xmlCatTema, '//item[$i]/idCategoriaTema'), IF(i<=intTotal, ',', ''));
    SET strValores = CONCAT(strValores, idProjetoCorrente, IF(i<=intTotal, ',', '')); -- CONCATENO ID_CORRENTE PARA O INSERT...
    SET strValores = CONCAT(strValores, '''',ExtractValue(xmlCatTema, '//item[$i]/dsJustificativa'),'''');

    SET strInsert = CONCAT(strInsert, 'INSERT INTO frmCategoriasTemas_TMP(id_Categoria_Tema, id_Projeto, ds_Justificativa) VALUES (', strValores, ')');
    SET @ins_text = strInsert;

    PREPARE stmt FROM @ins_text;
    EXECUTE stmt;

    SET strValores = '';
    SET strInsert = '';

    SET i = i+1;

  END WHILE;
  -- ###########################################################################

  SELECT * From frmCategoriasTemas_TMP;

 

XML:

 

<item><idCategoriaTema>01</idCategoriaTema><dsJustificativa>AAA</dsJustificativa></item><item><idCategoriaTema>02</idCategoriaTema><dsJustificativa>BBB</dsJustificativa></item>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.