Ir ao conteúdo
  • Cadastre-se

Attilio Galzerano

Membro Pleno
  • Posts

    35
  • Cadastrado em

  • Última visita

Reputação

11
  1. Fiz aqui um exemplo, assumindo que 1 seja entrada de produto (somar no estoque) e 2 seja saída de produto (subtrair do estoque) veja: delimiter // CREATE DEFINER=`root`@`localhost` TRIGGER `atualiza_estoque` AFTER INSERT ON `est_moviment` FOR EACH ROW BEGIN IF(NEW.mov_status_id = 1) THEN UPDATE est_cad_prod SET cad_prod_estoque = cad_prod_estoque + NEW.mov_qtde WHERE NEW.cad_prod_id = cad_prod_id; ELSE UPDATE est_cad_prod SET cad_prod_estoque = cad_prod_estoque - NEW.mov_qtde WHERE NEW.cad_prod_id = cad_prod_id; END IF; END;// delimiter ;
  2. Consegui fazer na base daquele ajuste técnico - Gambiarra Trigger para validar o insert: delimiter// CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_validar_insert` BEFORE INSERT ON `ocorrencia` FOR EACH ROW begin IF NEW.data_ocorrencia IS NULL THEN CALL `'O campo "data_ocorrencia" deve ser preenchido'`; END IF; end;// delimiter; Em anexo tem o insert (sem data_ocorrencia) e o erro acima. Apenas ajuste conforme o campo que se fizer necessário o preenchimento. Se o seu Mysql Workbench suportar você pode tentar por meio do comando SIGNAL.
  3. Já sabe sobre o que exatamente irá falar de Banco de Dados? Meu professor sugeriu uma vez na sala que algum grupo fizesse uma analise de desempenho de diferentes engines de banco de dados, pode ser promissor para um artigo, assim você coloca testes, gráficos e tudo mais.
  4. isso já não sei se tem como, precisaria pesquisar mais afundo para verificar a possibilidade. Mas é necessário uma trigger para validar o insert? Achei um link que parece interessante, veja se te ajuda. http://cvuorinen.net/2013/05/validating-data-with-triggers-in-mysql/
  5. faça então assim: crie outra tabela para armazenar apenas o id da ocorrencia e o tempo_duração (ligando por chave estrangeira com a tabela principal de calamidades), crie a trigger para realizar o cálculo do tempo e inserir o resultado nessa tabela nova. TABELAS: Create table ocorrencia ( id_ocorrencia INT NOT NULL AUTO_INCREMENT, data_ocorrencia DATETIME NOT NULL, data_termino DATETIME NOT NULL primary key(id_ocorrencia) ); Create table tempo_total ( codigo_ocorrencia INT NOT NULL, tempo_duracao TIME ); ALTER TABLE tempo_total ADD CONSTRAINT fk_ocorrencia FOREIGN KEY (codigo_ocorrencia) REFERENCES ocorrencia(id_ocorrencia); TRIGGER: delimiter // CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_tempo` AFTER INSERT ON `ocorrencia` FOR EACH ROW begin insert into tempo_total (codigo_ocorrencia, tempo_duracao) values (NEW.id_ocorrencia, TIMEDIFF(NEW.data_termino, NEW.data_ocorrencia)); end;// delimiter;
  6. esse erro que está aparecendo : é porque você está tentando criar uma tabela que já foi criada (tabela tempo_total). tenta rodar os comandos sql separados (primeiro um create table, depois o outro create table, depois a trigger e por último um insert para testar o funcionamento da trigger). Se ainda sim der erro, pode ser que a sintaxe seja um pouco diferente no Mysql Workbench - não sei dizer, nunca usei ele - nesse caso tente pelo jeito sem trigger, direto no insert: :
  7. @DoodohRafael o que você precisa fazer com esse banco? As datas precisam ser completas? Usando DATETIME (ano, mes, dia, hora, minuto e segundo - precisa de tudo isso?) Você pode tentar da forma como eu falei antes - usando apenas um insert e a função TIMEDIFF(). Ficaria assim: create table ocorrencia( id_ocorrencia INT NOT NULL, data_ocorrencia DATETIME, data_termino DATETIME, tempo_duracao TIME, primary key (id_ocorrencia) ); insert into ocorrencia (id_ocorrencia, data_ocorrencia, data_termino, tempo_duracao) values (47, '2017-05-11 08:50:20', '2017-05-12 09:50:20', TIMEDIFF('2017-05-12 09:50:20', '2017-05-11 08:50:20')); Desse jeito a conta (tempo_duracao) retorna a diferença no formato TIME - hora:minuto:segundo...
  8. Continuo achando que não é possível fazer por meio de trigger na mesma tabela que chamou essa trigger. testei um outro jeito aqui, dessa vez com trigger, mas inserindo o calculo de diferença em outra tabela. veja: TABELAS: CREATE TABLE `ocorrencia` ( `id_ocorrencia` int(11) NOT NULL, `data_ocorrencia` datetime DEFAULT NULL, `data_termino` datetime DEFAULT NULL, PRIMARY KEY (`id_ocorrencia`) ) CREATE TABLE `tempo_total` ( `codigo_ocorrencia` int(11) NOT NULL, `tempo_duracao` datetime DEFAULT NULL ) TRIGGER CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_tempo` AFTER INSERT ON `ocorrencia` FOR EACH ROW begin declare tempo_calculo DATETIME; SELECT Concat(Ano, '-', Mes, '-', Dia, ' ', Hora, ':', Minuto, ':', Segundo) AS Data_calculo into tempo_calculo FROM ( SELECT TIMESTAMPDIFF(YEAR, data_ocorrencia, data_termino) AS Ano, TIMESTAMPDIFF(MONTH, data_ocorrencia + INTERVAL TIMESTAMPDIFF(YEAR, data_ocorrencia, data_termino) YEAR , data_termino) AS Mes, TIMESTAMPDIFF(DAY, data_ocorrencia + INTERVAL TIMESTAMPDIFF(MONTH, data_ocorrencia, data_termino) MONTH , data_termino) AS Dia, TIMESTAMPDIFF(HOUR, data_ocorrencia + INTERVAL TIMESTAMPDIFF(DAY, data_ocorrencia, data_termino) DAY , data_termino) AS Hora, TIMESTAMPDIFF(MINUTE, data_ocorrencia + INTERVAL TIMESTAMPDIFF(HOUR, data_ocorrencia, data_termino) HOUR , data_termino) AS Minuto, TIMESTAMPDIFF(SECOND, data_ocorrencia + INTERVAL TIMESTAMPDIFF(MINUTE, data_ocorrencia, data_termino) MINUTE , data_termino) AS Segundo FROM ocorrencia where ocorrencia.id_ocorrencia = NEW.id_ocorrencia ) AS T; INSERT INTO tempo_total (codigo_ocorrencia, tempo_duracao) values (NEW.id_ocorrencia, tempo_calculo); end INSERT: INSERT INTO ocorrencia (id_ocorrencia, data_ocorrencia, data_termino) values (88, '2016-04-03 08:50:50', '2017-05-22 09:40:20'); Resultado na imagem em anexo. PS: esqueci de mencionar, você pode fazer o relacionamento das duas tabelas pelo campo id_ocorrencia (tabela - ocorrencia) e codigo_ocorrencia (tabela - tempo_total) por meio de chave estrangeira.
  9. @DoodohRafael Testei aqui no meu phpMyAdmin e realmente não consegui fazer funcionar da forma como você colocou. - Uma dúvida: porque tem um "drop table ocorrencia;" antes de criar a trigger? - Teste colocar o prefixo "NEW." antes de data_termino em sua trigger. Fiz aqui e não deu certo (minha teoria do porque abaixo) Acho que não é possível fazer por meio de trigger, provavelmente esse erro unknown column "data_termino" in field list é por conta de não poder referenciar a mesma tabela na trigger que a chamou. O que eu fiz foi por meio de procedure: CREATE TABLE `ocorrencia` ( `id_ocorrencia` int(11) NOT NULL, `data_ocorrencia` datetime DEFAULT NULL, `data_termino` datetime DEFAULT NULL, `tempo_duracao` time DEFAULT NULL, PRIMARY KEY (`id_ocorrencia`) ) CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_duracao`(IN `id` INT(11), IN `inicio` DATETIME, IN `fim` DATETIME) NO SQL begin insert into ocorrencia (id_ocorrencia, data_ocorrencia, data_termino, tempo_duracao) values (id, inicio, fim, (TIMEDIFF(fim, inicio))); end call sp_duracao(12, '2017-05-20 08:20:30', '2017-05-22 09:30:40') Desse jeito consegui colocar a diferença entre as datas em formato TIME, não sei por qual motivo não consigo mostrar a diferença em DATETIME, se alguém souber... Pode ser feito diretamente no insert também (apenas usando a função TIMEDIFF). Enfim, veja se isso lhe ajuda no seu problema.
  10. sim @caiokn uso estritamente doméstico, a única coisa em mente é ser barato e que dure bastante tempo. será que este celeron G1820 atende bem?
  11. @gustavodbg a troca de processador recomendada foi por questão de preço, ou por ser melhor? fiz uma outra conforme as recomendações, está melhor que com AMD?
  12. Boa tarde a todos! gostaria de ajuda/opinião na config em anexo (uso doméstico - internet, email e pacote office).
  13. Valeu pela ajuda, e bem interessante o link sobre as placas de vídeo recomendadas.
  14. Boa noite! - montei duas configs (anexo) uma AMD e outra INTEL. - o uso principal do pc: corel draw x7 (trabalho) e photoshop (pouco usado) - estão boas as configs? preciso de placa de vídeo nesse pc? não tem um valor fixo p/ gastar (+- R$ 2.500,00) PS: intel também 8 gb de ram, esqueci de atualizar.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...