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

4 respostas Resolvido
javamysql
CALERA

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

Dragoon

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

CALERA

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…

Dragoon

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

CALERA
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