postgresql - PostgreSQL ERROR:插入新数据时触发错误
问题描述
我创建了以下触发器,但是当我尝试在表中插入一些数据时,出现以下错误:“控制到达触发器过程的结尾,没有返回”。
我正在使用 SQL Manager Lite for PostgreSQL 版本 5.9.5,我尝试将 RETURN Null 更改为 RETURN NEW,但是当我尝试编译时,会发生同样的错误。
BEGIN
IF NEW.saida3 IS NOT NULL THEN
UPDATE ponto
SET banco_de_horas = "interval"((saida1 - entrada1) + (saida2 - entrada2) + (saida3 - entrada3) - '08:00:00')
WHERE "time"(entrada1) < '22:00:00' AND "time"(entrada1) > '06:00:00' AND saida3 IS NOT NULL;
RETURN NULL;
ELSE IF NEW.saida2 IS NOT NULL THEN
UPDATE ponto
SET banco_de_horas = "interval"((saida1 - entrada1) + (saida2 - entrada2) - '08:00:00')
WHERE "time"(entrada1) < '22:00:00' AND "time"(entrada1) > '06:00:00' AND saida2 IS NOT NULL;
RETURN NULL;
END IF;
END IF;
END;
触发器是计算补偿时间
解决方案
任何 PostgreSQL 函数都应该由RETURN
语句完成。
您的代码格式不正确,可读性不好
BEGIN
IF NEW.saida3 IS NOT NULL THEN
UPDATE ponto
SET banco_de_horas = "interval"((saida1 - entrada1)
+ (saida2 - entrada2)
+ (saida3 - entrada3) - '08:00:00')
WHERE "time"(entrada1) < '22:00:00'
AND "time"(entrada1) > '06:00:00'
AND saida3 IS NOT NULL;
RETURN NULL;
ELSE
IF NEW.saida2 IS NOT NULL THEN
UPDATE ponto
SET banco_de_horas = "interval"((saida1 - entrada1)
+ (saida2 - entrada2) - '08:00:00')
WHERE "time"(entrada1) < '22:00:00'
AND "time"(entrada1) > '06:00:00'
AND saida2 IS NOT NULL;
RETURN NULL;
END IF;
END IF; --<<< THIS branch is not closed by RETURN
END;
重新格式化后,您可以看到RETURN
缺少 的路径。
我不明白你的情况,所以我无法修复它,但对于这段代码,我认为RETURN null
它只能作为触发器函数的最后一条语句。