Insert em Java em Tabela Progress Especifica

Discussão em 'EMS , HCM e Totvs 11' iniciado por Marcos Flizikowski, Abril 5, 2023.

  1. Marcos Flizikowski

    Marcos Flizikowski Membro Participativo

    Bom dia Pessoal.
    Estou desenvolvendo uma POC aqui para fazermos uma avaliação para conectar em um outro Sistema nosso buscarmos dados e gravarmos este em uma tabela especifica que será usada posteriomente.

    Consegui conectar no Banco mas quando faço o Select e depois o Insert ele me apresenta a mensagem de erro abaixo.
    Vou mandar a parte do código onde faço o Select e o insert e o erro que esta ocrrendo.

    Connection connTotvs = TotvsConexao.creationConnectionTOTVS();

    String sqlTotvs = "INSERT INTO PUB.CIDinput(cid, proc, procedimento) VALUES (?,?,?)";
    PreparedStatement psTotvs = connTotvs.prepareStatement(sqlTotvs);
    psTotvs.setString(1, cid);
    psTotvs.setInt(2, Situacao);
    psTotvs.setString(3, procedimento);

    Erro que ocorre:
    Exception in thread "main" java.sql.SQLException: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column cid in table CIDINPUT has value exceeding its max length or precision.
    at openedge/com.ddtek.jdbc.openedge.client.dde.ae(Unknown Source)
    at openedge/com.ddtek.jdbc.openedge.client.dde.g(Unknown Source)
    at openedge/com.ddtek.jdbc.openedge.ddf.b(Unknown Source)
    at openedge/com.ddtek.jdbc.openedgebase.ddej.u(Unknown Source)
    at openedge/com.ddtek.jdbc.openedgebase.ddej.q(Unknown Source)
    at openedge/com.ddtek.jdbc.openedgebase.ddde.execute(Unknown Source)
    at CigmaConexao.Teste.main(Teste.java:47)


    Sendo que este campo na minha tabela CIDINPUT ele tem o seguinte formato:
    Campo: cid tipo char format "x(24)"

    Alguém poderia me dizer como resolver este erro?

    Agradeço a ajuda.

    Atenciosamente.
  2. Marcos Flizikowski

    Marcos Flizikowski Membro Participativo

    Fiz um teste e identifiquei que ele aceitou somente com tamanho 16 caracteres, mas achei muito estranho, pois tenho em outra tabela um campo com tamanho 2000 e ele gravou.
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Não sei como o java interpreta o banco progress, mas o erro está bem claro aqui:
    Column cid in table CIDINPUT has value exceeding its max length or precision

    Traduzindo
    Coluna CID na tabela CIDINPUT tem um valor que excede a comprimento máxima ou precisão (precisão se refere a campos decimais por exemplo)

    No progress, mesmo vc definindo um format x(10), ele consegue gravar 32768 caracteres (que é o máximo do campo CHARACTER), o format define
    somente a exibição.

    Agora se o banco for Oracle ou outro, o padrão é totalmente diferente, o comprimento máximo é realmente rígido.

    Não sei se seu banco é realmente progress, mas tudo indica que vc tem que fazer alguma correção no campo do banco.
  4. Marcos Flizikowski

    Marcos Flizikowski Membro Participativo

    Fiz um teste e identifiquei que ele aceitou somente com tamanho 16 caracteres, mas achei muito estranho, pois tenho em outra tabela um campo com tamanho 2000 e ele gravou.

    Identifiquei um Artigo no site da PRogress;

    Executing an SQL statement fails with the error "value exceeding its max length or precision". - Progress Community

    É um erro de tamanho de tabela, vou ver como resolvo com este artigo, ou vou acabar criando a tabela (como ela é especifica) novamente e trazer todos os registros de novo para ver o que acontece.

Compartilhe esta Página