Ir para conteúdo
Fórum Script Brasil
  • 0

Como codificar um Trigger para inserir e excluir notas promissórias em outra tabela?


flaviokowalske

Pergunta

Estou finalizando um sistema aqui e estou com dificuldades para criar um Trigger ou até mesmo uma Stored Procedure, não sei qual a forma mais correta ou indicada nesse caso.

Tenho uma tabela chamada <vendas> que armazena os dados de uma venda.

CREATE TABLE IF NOT EXISTS `gfinan`.`vendas` (
  `id_venda` INT NOT NULL AUTO_INCREMENT,
  `cpf` CHAR(11) NOT NULL,
  `placa` CHAR(7) NOT NULL,
  `id_pagamento` INT NOT NULL,
  `valor` DECIMAL(10,2) NOT NULL,
  `parcelas` INT NOT NULL,
  `data` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `cnpj` CHAR(14) NOT NULL,
  `id_usuario` INT NOT NULL,
  `status` CHAR(1) NOT NULL DEFAULT 'A',
  PRIMARY KEY (`id_venda`),
  INDEX `fk_vendas_veiculos_idx` (`placa` ASC),
  INDEX `fk_vendas_usuarios_idx` (`id_usuario` ASC),
  INDEX `fk_vendas_clientes_idx` (`cpf` ASC),
  INDEX `fk_vendas_empresas_idx` (`cnpj` ASC),
  INDEX `fk_vendas_pagamentos_idx` (`id_pagamento` ASC),
ENGINE = InnoDB

O campo <id_pagamento> identifica a forma de pagamento em uma venda, sendo a vista ou através de notas promissórias.

Quando for informado por exemplo o valor total de R$30.000,00 pagos em 12 notas promissórias, ao gravar os dados na tabela <vendas>, preciso que o banco insira na tabela <promissorias> 12 registros contendo, as datas de pagamentos, o numero da nota promissória e o valor de cada uma delas com base nos dados gravados na tabela anterior.

A estrutura da tabela <promissorias> é essa:

CREATE TABLE IF NOT EXISTS `picinin`.`promissorias` (
  `id_promissoria` INT NOT NULL AUTO_INCREMENT,
  `vencimento` DATETIME NOT NULL,
  `numeracao` INT NOT NULL,
  `valor` DECIMAL(10,2) NOT NULL,
  `emissao` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `id_venda` INT NOT NULL,
  `status` CHAR(1) NOT NULL DEFAULT 'E',
  PRIMARY KEY (`id_promissoria`),
  INDEX `fk_promissorias_vendas1_idx` (`id_venda` ASC),
ENGINE = InnoDB

Preciso também que esses dados seja excluídos caso a venda seja cancelada.

Nunca precisei fazer algo assim e estou com muita dificuldade, podem me orientar?

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1

Eu particularmente faria isso dentro da linguagem de programação e não do banco, mas isso é uma escolha pessoal por ter mais familiaridade com PHP do que com MySQL.

Tenta brincar com isso

DELIMITER $

CREATE TRIGGER Tgr_ItensVendas_Insert AFTER INSERT
ON ItensVenda
FOR EACH ROW
BEGIN
  parcelas: LOOP
    SET parcela = parcela + 1;
    IF parcela < NEW.parcelas THEN
      INSERT INTO `picinin`.`promissorias` (...) VALUE (...)
    END IF;
    LEAVE parcelas;
  END LOOP parcelas;

END$

DELIMITER ;

 

https://www.devmedia.com.br/mysql-basico-triggers/37462

https://dev.mysql.com/doc/refman/5.7/en/loop.html

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...