【发布时间】:2017-07-11 11:54:35
【问题描述】:
我正在尝试制作简单的触发函数(Postgresql),但在所有这些情况下(只是简单的示例),我都收到相同的错误 'function did not return any row':
新:
UPDATE somewhere SET something = something - 1;
RETURN NEW;
旧:
UPDATE somewhere SET something = something - 1;
RETURN OLD;
当我在“删除之前”调用这个函数时我应该返回什么? (“插入/更新后”效果很好)
Tyvm 提示!
按要求提供完整代码: 功能:
CREATE OR REPLACE FUNCTION pictogram_frequency_on_delete()
RETURNS trigger AS
$BODY$
DECLARE
new_frequency RECORD;
target_unit RECORD;
current_row RECORD;
units_with_same_type RECORD;
what RECORD;
BEGIN
SET search_path TO 'myScheme';
CASE TG_OP
WHEN 'DELETED' THEN what := OLD;
ELSE what:= OLD;
END CASE;
SELECT unit_type_uid INTO STRICT target_unit
FROM unit
WHERE unit_uid = what.unit_uid;
SELECT count(*) AS exists INTO STRICT current_row
FROM unit_type_pictogram utp
WHERE utp.pictogram_uid = what.pictogram_uid
AND utp.unit_type_uid = target_unit.unit_type_uid;
IF (current_row.exists = 0) THEN
RETURN what; /* return new/old doesnt work too */
END IF;
UPDATE unit_type_pictogram utp
SET frequency = frequency - 1
WHERE utp.pictogram_uid = what.pictogram_uid
AND utp.unit_type_uid = target_unit.unit_type_uid;
RETURN what; /* return new/old doesnt work too */
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
触发器:
CREATE TRIGGER on_delete_frequency
BEFORE DELETE
ON unit_pictogram
FOR EACH ROW
EXECUTE PROCEDURE pictogram_frequency_on_delete();
【问题讨论】:
-
请发布完整代码
-
@JGH 发布完整代码
标签: postgresql database-trigger