Copiar valores de uma tabela para outra adicionando mais 2 parâmetros - MySQL

4 respostas Resolvido
javamysql
C

Bom dia!

Por necessidade, tenho uma tabela chamada ‘mascara’ que permite ao usuário inserir em massa uma determinada quantidade de ‘pagamentos’, para não ter que fazer um a um na unha.

Funciona em partes, o banco é relacional, criei esta tabela para ‘adiantar’ o lado tendo em vista que todos os meses, teoricamente vários pagamentos se repetem, enfim…

Consigo fazer a cópia assim:

public void incluirPeriodoPagamento(Pagamento p1) throws SQLException {
        String sql1 = "INSERT INTO log ( datainclusao, usuarioinclusao, logincremento ) VALUES (?,?,?)";
        PreparedStatement stmt1 = conexao.prepareStatement(sql1);

        stmt1.setString(1, p1.getDataInclusao());
        stmt1.setString(2, p1.getUsuarioInclusao());
        stmt1.setString(3, p1.getLogIncremento());

        stmt1.execute();
        stmt1.close();

        String sql2 = "INSERT INTO pagamento (renovacao, diarenovacao, formapagamento, valordevido, "
                + "fornecedor_idfornecedor, categoria_idcategoria, controle_idcontrole, filial_idfilial, log_idlog) "
                + "SELECT renovacao, diarenovacao, formapagamento, valordevido, fornecedor_idfornecedor, "
                + "categoria_idcategoria, controle_idcontrole, filial_idfilial, (SELECT MAX(idlog) FROM log) "
                + "FROM mascara WHERE mascara.filial_idfilial = ? ";
        PreparedStatement stmt2 = conexao.prepareStatement(sql2);

        stmt2.setLong(1, p1.getIdFilial());

        stmt2.execute();
        stmt2.close();

        String sql3 = "UPDATE pagamento SET periodomes=?, periodoano=? WHERE periodomes IS NULL AND periodoano IS NULL  ";
        PreparedStatement stmt3 = conexao.prepareStatement(sql3);

        stmt3.setString(1, p1.getPeriodoMes());
        stmt3.setString(2, p1.getPeriodoAno());

        stmt3.execute();
        stmt3.close();

    }

Mas na última parte, quando eu tento fazer o Update na tabela pagamento substituindo a coluna periodomes e periodoano quando estão nulas, não acontece nada…

No MySQL ele só faz o Update se eu fizer isto antes:

SET SQL_SAFE_UPDATES=0;

Outra coisa que notei é que, obviamente da maneira que fiz, a tabela LOG só fica com 1 log registrado para todo o que eu fiz de Insert.

Alguém poderia me ajudar com isto?

Teria como eu colocar isto dentro de um laço? Acredito que assim seria a maneira correta, mas não sei como faze-la.

Agradeço muuito pela ajuda.

4 Respostas

D

Eu poderia saber o layout das duas tabelas? Poste por favor o layout das duas tabelas

C

Obrigado pelo retorno. As duas tabelas são “praticamente idênticas”, na verdade, quando criei a tabela mascara, foi através de um Like. Acontece que, a tabela pagamento tem colunas a mais que serão preenchidas em outro momento pelo usuário.

Funciona, ele copia todo o que tem da tabela mascara para a tabela pegamento, só que, preciso que mais 2 colunas recebam valor, e por este motivo faço o Update no final.

Segue as tabelas:

Tabela: mascara

Tabela: pagamento

não coube no Print, mas tem o idpagamento lá em cima…

D

Faça a dúvida e a colagem das imagens como se a duvida fosse passada pra você, então, edite o post anterior e coloque as duas imagens corretamente, por favor?

Coloque também exemplos de dados de uma tabela passando para a outra?

Caro @CALERA, quanto mais informação melhor e seja objetivo, fico no aguardo

C
Solucao aceita

Dragon, obrigado pelo retorno.

O MySQL tem uma opção de desabilitar o SAFE UPDATES, está funcionando corretamente, não era problema com o código.

…a não ser a parte em que a tabela de LOG fica com um registro só para todos os pagamentos transferidos da tabela máscara para a tabela pagamento, mas ajusto isto depois.

Abraço.

Criado 26 de julho de 2016
Ultima resposta 26 de jul. de 2016
Respostas 4
Participantes 2