Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

TRIGGERs que fazem com que INSERTs falhem? Possível?


A partir deste post do blog

MySQL Triggers:Como você aborta um INSERT, UPDATE ou DELETE com um atrigger? No #mysql da EfNet alguém perguntou:

Como faço um gatilho abortar a operação se minha regra de negócios falhar?

No MySQL 5.0 e 5.1 você precisa recorrer a alguns truques para fazer um gatilho falhar e entregar uma mensagem de erro significativa. O FAQ do MySQL StoredProcedure diz isso sobre tratamento de erros:

SP 11. Os SPs têm uma instrução “raise” para “levantar erros de aplicação”? Desculpe, no momento não. As instruções SIGNAL e RESIGNAL padrão SQL estão no TODO.

Talvez o MySQL 5.2 inclua SIGNALstatement que tornará este hackstolen direto da programação do MySQL StoredProcedure obsoleto. Qual é o hack? Você vai forçar o MySQL a tentar usar uma coluna que não existe. Feio? Sim. Funciona? Certo.
CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;