Jump to content
Fórum Script Brasil
  • 0

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


Question

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 to post
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148886
    • Total Posts
      644943
×
×
  • Create New...