我在这里遇到一些问题:我在一个程序中启动一个触发器,当我测试它是否包含错误时,它不会插入行但不会抛出异常。 这是代码:
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”时,它会阻止该过程,但不会发出错误信号。 如果我使用的是正常更新,而不是程序,则可以使用。
请帮我解决这个问题。 最诚挚的问候