MYSQL更新来自触发器的非现有行不会引发异常

时间:2013-02-18 08:22:13

标签: mysql triggers

我在这里遇到一些问题:我在一个程序中启动一个触发器,当我测试它是否包含错误时,它不会插入行但不会抛出异常。 这是代码:

    DELIMITER // 
CREATE TRIGGER pagata_tgr_ins BEFORE INSERT ON Pagata
FOR EACH ROW
   IF inclusioneInPagamento(new.Tipo,new.DataInizio,new.DataFine,new.Nome,new.Cognome) = 0
      THEN CALL eccezioneInclInPagamento();
   ELSEIF inclusioneIstituto(new.Istituto) = 0
      THEN CALL eccezioneInclIstituto();
   ELSEIF (@PAG_TRIG IS NULL )
      THEN CALL eccezionePagBolletta();

   END IF;//
DELIMITER ;


   CREATE PROCEDURE eccezioneInclIstituto ()
   UPDATE `Eccezione vincolo, istituto inesistente` SET X=1; 

并且有我使用的程序:

DELIMITER // 
CREATE PROCEDURE trans_paga_bolletta(Tipo varchar(25),DataInizio date,DataFine date,DataEsecuzione date,Nome varchar(25),Cognome varchar(25),Istituto varchar(25))
   BEGIN
      DECLARE controllo bool;
      DECLARE EXIT HANDLER FOR SQLEXCEPTION
         BEGIN
            ROLLBACK;
            SET foreign_key_checks = 1;
            SET @PAG_TRIG = NULL;
            SET @ARR_TRIG = NULL;            
            SET AUTOCOMMIT = 1;
            SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
         END;
         SET AUTOCOMMIT = 0;
         SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
         SET foreign_key_checks = 0;
         SET @PAG_TRIG = 1;
         SET @ARR_TRIG = 1;  

         INSERT INTO BollPagata (`Tipo`, `DataInizio`, `DataFine`) VALUES (Tipo, DataInizio, DataFine);
         INSERT INTO Pagata (`Tipo` ,`DataInizio` ,`DataFine` ,`DataEsecuzione` ,`Nome` ,`Cognome` ,`Istituto`) VALUES  
                                      (Tipo ,DataInizio ,DataFine ,DataEsecuzione ,Nome ,Cognome ,Istituto);
         SET foreign_key_checks = 1;
         SET @PAG_TRIG = NULL;
         SET @ARR_TRIG = NULL;                              
         COMMIT;
         SET AUTOCOMMIT = 1;        
         SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
      END//
DELIMITER ;  

INSERT INTO Pagata如上所述调用触发器,但是当传递一个虚构的“Istituto”时,它会阻止该过程,但不会发出错误信号。 如果我使用的是正常更新,而不是程序,则可以使用。

请帮我解决这个问题。 最诚挚的问候

0 个答案:

没有答案