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

(Resolvido) Como parar a execução da Trigger


Jordano Cherobim

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0

Olá jordano. É só você inserir o método break; que o loop para. Mas você tem que criar uma condição para ele parar quando identificar.

Entendo que sua busca é no mysql, mas que linguagem você está usando para fazer isso? Se não consegui deixa o código aqui para eu consultar, uma parte dele apenas.

Bye Bye!

Link para o comentário
Compartilhar em outros sites

  • 0

Estou inserindo uma venda, mas só pode ocorrer se meu estoque for maior que a quantidade solicitada. Eu já fiz a condição, porém quando executo preciso que se ele não entrar no IF, não deixe a venda ser inserida.

DELIMITER $$
create trigger `insereSaidaLamina` BEFORE INSERT on `fardoLamina`
for each row BEGIN
DECLARE message CONDITION FOR sqlstate '45000';
IF (qtd >= NEW.consumoTora) THEN
UPDATE prod SET quantidade = quantidade - NEW.quanti .......;
ELSE
signal sqlstate '45000';
SET message = 'Estoque de toras insuficiente';
END IF;
END;
$$
DELIMITER ;
Porém este não está funcionando..
Link para o comentário
Compartilhar em outros sites

  • 0

Sinceramente isso pode sobrecarregar o servidor. Por que você não usa um meio de buscar primeiro a quantia do item que você deseja para depois fazer a requisição ou não criando uma comparação, ao invés de fazer isso no sql. Faz uma busca simples e compara antes de todo o processo geral. Você não tem como fazer isso por fora não sendo por sql?? As vezes nem tudo dá pra fazer no sql. Tenho uma redesocial e muitos códigos grotescos tem limite no Mysql que eu uso o PHP antes de tudo.

Link para o comentário
Compartilhar em outros sites

  • 0

Em vez de fazer por trigger faça por storage procedure.

É mais prático, seguro, mais controlável, pode emitir mensagem de retorno e,

ao contrário do que o DavilX falou no tópico anterior, controles de regras de negócio, não sobrecarregam o servidor.

Link para o comentário
Compartilhar em outros sites

  • 0

Para forçar um erro em um trigger basta atribuir NULL a um campo NOT NULL.

Segue abaixo um exemplo de como eu executo CUD(Create, Update, Delete)

/* Criação tabela exemplo */
CREATE TABLE exemplo(
idExemplo INT UNSIGNED NOT NULL AUTO_INCREMENT,
dsExemplo VARCHAR(50) NOT NULL,
PRIMARY KEY (idExemplo)
)ENGINE InnoDB;
 
DELIMITER $$;
 
DROP PROCEDURE IF EXISTS `meuBancoDeDados`.`exemploCUD`$$
 
CREATE DEFINER=`root`@`localhost` PROCEDURE `exemploCUD`(IN Acao CHAR(1), IN pidExemplo INTEGER, IN pdsExemplo VARCHAR(50))
BEGIN
   DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem";
   DECLARE excecao SMALLINT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1;
   /* faça aqui a verificação de suas regras de negocio para gravação desta tabela*/ 
   IF pdsExemplo = "" OR (Acao <> "I" AND pidExemplo = 0) THEN
      SET msg = "Erro na passagem de parametros";
   ELSE
      START TRANSACTION;
      /*Inclusao*/
      IF Acao = "I"  AND excecao = 0 THEN
         INSERT INTO exemplo(dsExemplo)
         VALUES (pdsExemplo);
         IF excecao = 1 THEN
            SET msg = "Erro ao inserir na tabela exemplo";
            ROLLBACK;
         END IF;
      END IF;
      IF Acao <> "I" AND excecao = 0 THEN
         SET @idExemplo = pidExemplo;
      END IF;
      /*Alteracao*/
      IF Acao = "A" and excecao = 0 THEN
         UPDATE exemplo
         SET dsExemplo = pdsExemplo
         WHERE idExemplo = @idExemplo;
         IF excecao = 1 THEN
            SET msg = "Erro ao atualizar";
            ROLLBACK;
         END IF;
      END IF;
      /*Exclusao*/
      IF Acao = "E" and excecao = 0 THEN
         DELETE FROM exemplo
         WHERE idExemplo = @idExemplo;
         IF excecao = 1 THEN
            SET msg = "Erro ao excluir";
            ROLLBACK;
         END IF;
      END IF;
      
      /*Se tudo deu certo, então finaliza confirmando a gravação.*/
      IF excecao = 0 THEN
         COMMIT;
         IF Acao = "I" THEN
            SET msg = "Incluido com sucesso";
         ELSE
            IF Acao = "A" THEN
               SET msg = "Alterado com sucesso";
            ELSE
               SET msg = "Excluido com sucesso";
            END IF;
         END IF;
      END IF;
   END IF;
   SELECT msg AS msg;
END$$
 
DELIMITER ;$$
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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