>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Trigger


Boa tarde, preciso fazer uma trigger que ao incluir dados na tabela "prodvdmat" vai na tabela de entrada e pesquisa se tem o registro igual se tive atualiza(update) se não achar inclui um registro novo

[CODE

CREATE DATABASE IF NOT EXISTS `bailledados` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `bailledados`;

-- --------------------------------------------------------

--
-- Estrutura da tabela `entradarm`
--

CREATE TABLE IF NOT EXISTS `entradarm` (
  `codEntra` int(11) NOT NULL AUTO_INCREMENT,
  `codVendedor` int(11) NOT NULL DEFAULT '0',
  `codArmar` int(11) NOT NULL DEFAULT '0',
  `quantidade` int(11) NOT NULL DEFAULT '0',
  `valor` decimal(10,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`codEntra`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT AUTO_INCREMENT=5 ;

--
-- Extraindo dados da tabela `entradarm`
--

INSERT INTO `entradarm` (`codEntra`, `codVendedor`, `codArmar`, `quantidade`, `valor`) VALUES
(1, 1, 1, 6, '21.90'),
(2, 5, 3, 5, '10.00'),
(3, 1, 1, 2, '10.00'),
(4, 0, 0, 0, '0.00');

-- --------------------------------------------------------

--
-- Estrutura da tabela `prodvdmat`
--

CREATE TABLE IF NOT EXISTS `prodvdmat` (
  `codPrdvdmat` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `codVendedor` int(11) NOT NULL,
  `codArmar` int(11) NOT NULL,
  `quantidade` int(11) NOT NULL,
  `valor` decimal(10,2) NOT NULL,
  `datacompra` datetime NOT NULL,
  PRIMARY KEY (`codPrdvdmat`),
  KEY `FK_prodvdmat_codVendedor` (`codVendedor`),
  KEY `FK_prodvdmat_codArmar` (`codArmar`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;

--
-- Extraindo dados da tabela `prodvdmat`
--

INSERT INTO `prodvdmat` (`codPrdvdmat`, `codVendedor`, `codArmar`, `quantidade`, `valor`, `datacompra`) VALUES
(0000000004, 5, 5, 1, '10.80', '2018-11-25 00:00:00'),
(0000000005, 5, 6, 1, '19.80', '2018-11-25 00:00:00'),
(0000000006, 6, 7, 6, '89.40', '2018-11-25 00:00:00'),
(0000000007, 6, 8, 6, '6.00', '2018-11-25 00:00:00'),
(0000000008, 9, 9, 1, '24.90', '2018-10-21 00:00:00'),
(0000000012, 1, 1, 4, '11.90', '2018-11-09 00:00:00'),
(0000000013, 4, 4, 2, '5.20', '2018-11-25 00:00:00'),
(0000000014, 5, 3, 5, '10.00', '2018-12-15 00:00:00'),
(0000000015, 5, 3, 2, '10.00', '2019-01-09 00:00:00'),
(0000000017, 1, 1, 2, '5.00', '2019-01-09 00:00:00');

--
-- Acionadores `prodvdmat`
--
DROP TRIGGER IF EXISTS `trg_entradarm`;
DELIMITER //
CREATE TRIGGER `trg_entradarm` BEFORE INSERT ON `prodvdmat`
 FOR EACH ROW BEGIN
  declare codV int;
  declare codA int;
  select codVendedor codArmar INTO codV, codA from prodvdmat;
  IF (codV <> new.codVendedor and codA <> new.codArmar) then
     insert into entradarm(codVendedor, codArmar, quantidade, valor) values (new.codVendedor, new.codArmar, new.quantidade, new.valor);
  else
    UPDATE entradarm SET quantidade = quantidade + new.Quantidade, valor = valor + new.valor WHERE codVendedor = new.codVendedor and codArmar = new.codArmar;
  end if;
END
//
DELIMITER ;

--
-- Constraints for dumped tables
--

--
-- Limitadores para a tabela `prodvdmat`
--
ALTER TABLE `prodvdmat`
  ADD CONSTRAINT `FK_prodvdmat_codArmar` FOREIGN KEY (`codArmar`) REFERENCES `armarinhos` (`codArmar`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_prodvdmat_codVendedor` FOREIGN KEY (`codVendedor`) REFERENCES `vendedores` (`codVendedor`);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

]