删除预防触发器不工作-postgresql
我为航班预订数据库创建了这个触发器,该触发器用于防止在使用delete sql语句时删除预订。我有两种状态。一个是“r”表示保留,另一个是“c”表示取消。我的任务是确保预订不能被删除,如果用户试图删除预订,就会引发异常,如我的示例触发器所示 我已经创建了这个触发器,它已成功执行,但当我通过删除状态为“r”的预订来测试它时,它会运行并显示“查询已成功返回:一行受影响…”,这不是我想要的。我希望它引发异常,而不是删除预订删除预防触发器不工作-postgresql,postgresql,triggers,Postgresql,Triggers,我为航班预订数据库创建了这个触发器,该触发器用于防止在使用delete sql语句时删除预订。我有两种状态。一个是“r”表示保留,另一个是“c”表示取消。我的任务是确保预订不能被删除,如果用户试图删除预订,就会引发异常,如我的示例触发器所示 我已经创建了这个触发器,它已成功执行,但当我通过删除状态为“r”的预订来测试它时,它会运行并显示“查询已成功返回:一行受影响…”,这不是我想要的。我希望它引发异常,而不是删除预订 CREATE FUNCTION prevent_deletion() RETU
CREATE FUNCTION prevent_deletion() RETURNS trigger AS $prevent_deletion$
BEGIN
IF 'status' = 'r' THEN
RAISE EXCEPTION 'You cannot delete reserved bookings';
END IF;
RETURN NEW;
END;
$prevent_deletion$ LANGUAGE plpgsql;
CREATE TRIGGER prevent_deletion AFTER DELETE ON flightbooking
FOR EACH ROW EXECUTE PROCEDURE prevent_deletion();
这一行:
IF 'status' = 'r' THEN
…将字符串'status'
与字符串'r'
进行比较(当然,它们永远不会相等……)
将字段status
与字符串'r'
进行比较如下:
IF OLD.status = 'r' THEN
这一行:
IF 'status' = 'r' THEN
…将字符串'status'
与字符串'r'
进行比较(当然,它们永远不会相等……)
将字段status
与字符串'r'
进行比较如下:
IF OLD.status = 'r' THEN
在删除之前需要一个
触发器。@J.Doe:在触发器之前的中,如果返回NULL
,触发操作将中止,并且在您的情况下NEW
为NULL
(没有删除的“新”记录)。请尝试返回旧的
。在删除
触发器之前,您需要一个。@J.Doe:在
触发器之前的中,如果您返回NULL
,新的
在您的情况下是NULL
(没有删除
的“新”记录),则触发操作将中止。请尝试返回旧的
。