我创建了以下触发器,但是当我尝试在表中插入一些数据时,会发生以下错误:“控件到达触发器过程的结尾而没有返回”。
我使用的是PostgreSQL 5.9.5版的SQL Manager Lite,我试图将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;
触发是计算补偿时间
答案 0 :(得分:0)
任何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
只能作为触发函数的最后一条语句。