0

我有一个触发器:

CREATE TRIGGER BEFORE_DELETE_ON_SENTIERO__HA__TAPPA
BEFORE DELETE ON SENTIERO__HA__TAPPA
FOR EACH ROW 
BEGIN

DECLARE temp_prima_tappa INTEGER;
DECLARE temp_ultima_tappa INTEGER;

-- NOW THIS QUERY WILL FAIL;   it checks if the record that has to be deleted is in the table
IF NOT EXISTS ( SELECT *
                FROM SENTIERO__HA__TAPPA as sht
                WHERE OLD.IDsentiero=sht.IDsentiero and OLD.IDtappa=sht.IDtappa) THEN

                        SIGNAL SQLSTATE '45000'
                        SET MESSAGE_TEXT = 'DELETE: La tappa indicata non è nel sentiero; impossibile elimnarla';

END IF;

IDsentiero 和 IDtappa 是它们相关表的 PK:IDsentiero 代表 SENTIERO,IDtappa 代表 TAPPA。

问题是DELETE QUERY 没有用该错误消息回复我;只是它让运行 DELETE QUERY,虽然它不能删除任何东西,因为该记录在表中不存在。

问题是那个查询..我确定,但我找不到错误。

4

2 回答 2

0

删除触发器仅在实际删除的行上运行,因此当触发器运行时,该行必须存在。您不能使用触发器来查找无效的删除语句。

于 2013-02-09T20:30:34.487 回答
0

像这样的东西应该工作:

declare recsexist int;
set recsexist = 0;  

SELECT 1 INTO recsexist 
FROM SENTIERO__HA__TAPPA as sht
WHERE OLD.IDsentiero=sht.IDsentiero and OLD.IDtappa=sht.IDtappa;

IF (recsexist > 0) THEN
     ...

END IF; 
于 2013-02-09T19:30:12.167 回答