Mitaco 0 Denunciar post Postado Março 28, 2013 Pessoal boa tarde, Eu gostaria de extrair dados XML e atualizar uma Tabela. Montei uma proc e ela está dando: Invalid e eu não sei o motivo, alguém poderia analizar minha proc? Outra questão, a forma como estou pegando os dados do XML e colocando em um cursor esta certo? CREATE OR REPLACE Procedure SP_ATUALIZA_DADOS ( PI_xmlDocument IN xmlType) is COD_REG INT; COD_OCORR INT; DESC_ERRO VARCHAR2; WITH xmlDocument AS ( SELECT PI_xmlDocument xmlColunas FROM dual ) CURSOR CR_ATUALIZAR IS SELECT extractvalue(value(col), '/DADOS/IDREG') CODREG, extractvalue(value(col), '/DADOS/IDOCORR') CODOCORR, extractvalue(value(col), '/DADOS/DESCERRO') DESCERRO FROM xmlDocument, TABLE(XMLSequence(extract(xmlDocument.xmlColunas,'/ROOT/DADOS'))) col; BEGIN OPEN CR_ATUALIZAR; LOOP FETCH CR_ATUALIZAR INTO COD_REG, COD_OCORR, DESC_ERRO; EXIT WHEN CR_ATUALIZAR%NOTFOUND; UPDATE ORAMAG.TB_REQU_RETO_CLIE TB SET TB.txt_rspa_requ = DESC_ERRO WHERE TB.cod_ocor = COD_OCORR; COMMIT; END LOOP; CLOSE CR_ATUALIZAR; END; Eu sei que executando apenas esse comando como teste a query retorna os dados do XML em colunas.Se quiser testar para ver: WITH xmlDocument AS ( SELECT xmlType('<ROOT><DADOS><IDREG>123</IDREG><IDOCORR>12345</IDOCORR><DESCERRO>TESTE DESC</DESCERRO></DADOS><DADOS><IDREG>456</IDREG><IDOCORR>6789</IDOCORR><DESCERRO>TESTE DESC 2</DESCERRO></DADOS></ROOT>') xmlColunas FROM dual ) SELECT extractvalue(value(col), '/DADOS/IDREG') CODREG, extractvalue(value(col), '/DADOS/IDOCORR') CODOCORR, extractvalue(value(col), '/DADOS/DESCERRO') DESCERRO FROM xmlDocument, TABLE(XMLSequence(extract(xmlDocument.xmlColunas,'/ROOT/DADOS'))) col; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 28, 2013 Antes de mais nada tente ver os erros da Procedure, use uma ferramenta de gerenciamento (tipo Sql Developer) ou rode a query abaixo se não tiver nenhuma SELECT SEQUENCE , LINE , POSITION , TEXT FROM USER_ERRORS WHERE NAME = 'SP_ATUALIZA_DADOS' se a procedure está invalida e tem erros de compilação vão aparecer aqui. ------- Sem ao menos saber os erros fica difícil saber. Compartilhar este post Link para o post Compartilhar em outros sites
Mitaco 0 Denunciar post Postado Março 29, 2013 Motta vlw pelo comando, na segunda vou testar pq isso é coisa do trampo. Eu na vdd utilizo o Developer, porém ele não diz o erro que esta acontecendo, apenas cria a proc com "X" e nas propriedades dela vem o Invalid. Se este comando falar de fato qual o erro vc pode ter certeza que serei o cara mais feliz do mundo. Boa pascoa e um ótimo fds. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 29, 2013 O sqldeveloper indica o erro sim, talvez a opção de exibir esteja desabilitada, mas na realidade o que ele faz e ler a tabela de erros. Compartilhar este post Link para o post Compartilhar em outros sites
Mitaco 0 Denunciar post Postado Abril 2, 2013 Motta vlw mesmo por essa query que passou. O erro que esta ocorrendo é: PLS-00103: Encoutrered the symbol "with" when expecting one of the following: Começar function pragma procedimento subtype tipo <um identificador> <um identificador delimitado por aspas duplas> atual cursor deletar existe prior. Line 8 Position 5. Tou procurando no google aqui. Vlw. Compartilhar este post Link para o post Compartilhar em outros sites
Mitaco 0 Denunciar post Postado Abril 3, 2013 Bom dia pessoal, consegui resolver o problema que estava ocorrendo. O problema era que o meu cursor estava em cima do meu comando SELECT quando ele deveria estar em cima do meu comando WITH, segue a baixo o exemplo correto: CREATE OR REPLACE Procedure SP_ATUALIZA_DADOS ( PI_xmlDocument IN xmlType) is COD_REG INT; COD_OCORR INT; DESC_ERRO VARCHAR2; CURSOR CR_ATUALIZAR IS WITH xmlDocument AS ( SELECT PI_xmlDocument xmlColunas FROM dual ) SELECT extractvalue(value(col), '/DADOS/IDREG') CODREG, extractvalue(value(col), '/DADOS/IDOCORR') CODOCORR, extractvalue(value(col), '/DADOS/DESCERRO') DESCERRO FROM xmlDocument, TABLE(XMLSequence(extract(xmlDocument.xmlColunas,'/ROOT/DADOS'))) col; BEGIN OPEN CR_ATUALIZAR; LOOP FETCH CR_ATUALIZAR INTO COD_REG, COD_OCORR, DESC_ERRO; EXIT WHEN CR_ATUALIZAR%NOTFOUND; UPDATE ORAMAG.TB_REQU_RETO_CLIE TB SET TB.txt_rspa_requ = DESC_ERRO WHERE TB.cod_ocor = COD_OCORR; COMMIT; END LOOP; CLOSE CR_ATUALIZAR; END; Compartilhar este post Link para o post Compartilhar em outros sites