Jump to content
MMMartins

A utilização da função han dler esta pulando os ids. Como faço para isso não acontecer?

Recommended Posts

Veja o exemplo:

create table time( id int not null primary key auto_increment, nome varchar(50) unique )engine=innodb;

delimiter $$ CREATE PROCEDURE insertteam (nometime varchar(50)) begin declare continue handler for 1062 select 'você ja inseriu esse nome anteriormente'; insert into time (id, nome) values(null, nometime); end$$ delimiter ;

call insertteam ('BRASIL'); select * from time;

se eu "chamar" e inserir brasil novamente ele trava corretamente, até ai tudo ok. Mas quando vou inserir um time que ainda não existe ele insere corretamente, mas pula os ids nas respectivas vezes que tentei inserir brasil novamente e deu errado. Por exemplo: se eu tentar inserir brasil 5 vezes ele insere a primeira e da erro nas outras. Mas depois quando eu for inserir "mexico" ele insere corretamente mas no id = 6.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By danilo759
      Estou com uma dúvida, em uma tabelinha é cadastrado a data em uma coluna e a hora em outra coluna, então para "juntar" podemos usar CONCAT() no SELECT. Tudo certo...
       
      SELECT id, CONCAT(data_ini, ' ', hora_ini) as inicio FROM tabela

      Retorna como esperado:

       

      Minha dúvida é, se eu quiser exibir o horário de término para ficar assim como seria a consulta? Lembrando que não existe as colunas data_final e horario_final.

      2020-09-13 03:00:00 2020-09-13 04:00:00
      2020-09-13 04:00:00 2020-09-13 05:00:00
      2020-09-13 05:00:00 ....
    • By slaoxx
      Não conseguir obter êxito, minha sintaxe foi a seguinte:
       
      CREATE FUNCTION precomed ()
      RETURNS decimal
      SELECT AVG(preco_cd);
       
      SELECT precomed ();
       
    • By reginaldo.sacramento
      Tenho a tabela usuário ( id, nome, celular ) e logs ( id, data )
      Aí se eu faço um CONSTRANT.. ficaria
      Usuário ( id, nome, celular )
      Logs ( id, data, id_usuario )
      Como eu faria um insert (e depois um UPDATE ) na tabela Logs ?
      Como capturo essa alteração em log? 
    • By Samuel Pietro
      Estou com a seguinte situação.
       
      Preciso que o Update só aconteça nos campos vazios. Por exemplo, tenho no CSV 
      id;a;b;c 1;1;;3 1;1;2;;  
      |id | a | b | c |
      | 1 | 1 |    | 3 |
      | 1 | 1 | 2 |  |
       
      Na primeira linha tenho o campo da coluna b em branco, logo ele irá inserir no banco de dados o conteúdo da primeira linha, quando ele ler a segunda linha irá ver que a minha key, que é a coluna id, já existe e irá atualizar, o problema é que eu preciso que  atualize apenas os campos em branco, pois se atualizar todos os campos ele iria substituir o campo da coluna c que ficaria em branco !
       
      O código que fiz até o momento! 
      INSERT INTO tabela (id, a, b, c) VALUES ('$column[0]','$column[1]','$column[2]','$column[3]') on duplicate key UPDATE id='$column[0]',a='$column[0]', b='$column[0]', c='$column[0]'  
      Gostaria da ajuda de vocês para saber como posso adequar esse código na minha necessidade, seria tipo adcionar is null UPDATE.. sei lá, tentei várias opções mas sem sucesso ainda! 
       
       
       
       
    • By Vitor Buss
      Boa tarde pessoal, estou atras de alguém que possa me ajudar com um trabalho da minha faculdade, ele não é tão complexo e estou disposto a pagar por uma pessoa que possa me ajudar a realizar este trabalho que esta dividido em 4 etapas.
       
       Etapa 1-  A empresa TechLogica tem vários empregados e precisa implementar um sistema de gerenciamento de projetos. Após várias reuniões e discussões com os responsáveis e usuários do sistema, observou-se que são necessários os dados pessoais e o salário de cada empregado.
      Cada empregado trabalha em um departamento e cada departamento pode ter vários colaboradores, sendo um deles o gerente. Cada empregado tem um supervisor e este pode supervisionar vários empregados. O empregado pode ter nenhum, um ou vários dependentes, sendo necessários os dados pessoais de cada dependente.
      Além disso, existem vários projetos na empresa, sendo preciso armazenar a data de início, participantes, etapas e atas de reuniões. Cada projeto pode ter um ou mais empregados trabalhando nele, da mesma forma que um empregado pode trabalhar em nenhum, um ou vários projetos. Cada projeto pode pertencer a um ou vários departamentos.
       Diante disso:
      Crie o MER com as entidades, relacionamentos, cardinalidades, atributos, chaves primárias e estrangeiras. Você pode fazer no caderno, editor de texto ou em uma ferramenta de case. Normalize até a 3ª forma normal.  
      Etapa 2 
      Utilizando comandos SQL (script) – utilize a interface gráfica somente para rodar os scripts nesta etapa –, crie o banco de dados, com entidades, relacionamentos, chaves primárias e estrangeiras. Insira 15 registros em cada tabela. Utilizando o comando Select, verifique todos os registros de cada tabela. Apague todos os registros de todas as tabelas. Observe a ordem correta para apagar os registros, de forma a obedecer à integridade referencial. Execute novamente os scripts para inserir os registros. O resultado desta etapa são o banco criado no SGBD e os scripts SQL utilizados para executar todos os passos.
       
      Etapa 3 
      Crie um stored procedure que receba um valor como parâmetro de input. Dentro do stored procedure dê aumento de salário, de acordo com o percentual recebido, a todos funcionários. Utilize o conceito de transação. Crie uma view que mostre o nome de todos os empregados e, para aqueles com dependentes, o nome de cada dependente. Utilizando SQL, crie o comando para mostrar: o nome do empregado com maior salário; o nome do empregado com maior salário e o valor deste; o nome do empregado e respectivo salário, ordenando do maior para o menor valor; a média de salário de empregados do gênero masculino; a média de salário de empregados do gênero feminino; o nome dos empregados que são gerentes; o nome dos empregados que trabalham em um ou mais projetos. O resultado desta etapa são os scripts SQL utilizados para executar todos os passos.
       
      Etapa 4 
      Explique de forma discursiva (com editor de texto – Word, por exemplo) quando deve ser feito o backup de um banco de dados, cuja carga de dados é feita todos os sábados. Justifique. Para o banco de dados desenvolvido nesta ATP, crie um plano de manutenção de backup obedecendo às seguintes regras: backup completo todos os domingos, backup incremental (ou diferencial) todas as quartas e backup de log de transação a cada 15 minutos. Considerando os passos anteriores, analise as queries e indique três índices que poderiam ser criados. Justifique (utilize editor de texto – Word, por exemplo).
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.