PostgreSQL触发器错误控制已达到触发器的结尾而没有返回

时间:2019-06-20 21:07:31

标签: postgresql plpgsql database-trigger

编辑:我已将更新的代码添加到我的帖子中,我错过了一个 aws ram get-resource-share-associations --association-type <blah> --query 'resourceShareAssociations[*].[resourceShareArn]' --output text |xargs -I {} aws ram accept-resource-share-invitation --resource-share-invitation-arn {} 我的IF块之外

我有一个表return null,其中包含最新数据,并且希望添加一个对其进行更新的触发器,以便可以将对特定列所做的更改记录在另一个表working中。我运行此代码来创建触发函数并对其进行测试,但出现错误

history

我的代码:

SQL Error [2F005]: ERROR: control reached end of trigger procedure without RETURN
  Where: PL/pgSQL function update_history()

1 个答案:

答案 0 :(得分:2)

不满足条件时,您的函数无法到达RETURN语句。将语句放在IF块外面。返回的值将被忽略,您可以使用NULL代替NEW

CREATE FUNCTION update_history ()
RETURNS TRIGGER
AS $$
BEGIN
    IF NEW.discipline <> OLD.discipline THEN
        INSERT INTO history (ShiftId, fieldName, OldValue, NewValue)
        VALUES(NEW.shift_id, 'discipline', OLD.discipline, NEW.discipline);
    END IF;
    RETURN NULL;
END;
$$
LANGUAGE plpgsql;

the documentation:

  

总是会忽略行级触发器AFTER触发后或语句级触发器BEFORE或AFTER触发的返回值;它也可能为空。