PostgreSQL - 创建触发器:函数不存在
PostgreSQL - Creating a trigger: function does not exist
我现在正在为学校编写脚本,遇到了一个我无法修复的奇怪错误。
所以我有一个播放列表、曲目和一个播放列表输入 table。
我的任务是创建一个触发器,如果我 add/delete 曲目到我的播放列表,amountOfTracks 变量应该是 increased/decreased.
所以现在是奇怪的错误:
我创建了一个函数 "playlistInputAdd",它在执行 "select playlistInputAdd(1,1)" 时已经有效。
问题是,如果我创建我的触发器,它会说这个函数不存在。我看到有人问过同样的问题,但他没有添加参数,而我确实添加了。
playlistInputAdd函数:
CREATE FUNCTION playlistInputAdd(ID int, Amount int)
RETURNS VOID
AS $$
BEGIN
UPDATE playlist
SET amountOfTracks = amountOfTracks + Amount
WHERE playListID = ID;
END;
$$ LANGUAGE plpgsql;
playlistInputAdd_trigger触发器:
CREATE TRIGGER playlistInputAdd_trigger
AFTER INSERT
ON playlistInput
FOR EACH ROW
EXECUTE PROCEDURE playlistInputAdd(playlistID, 1);
playlistInputDelete_trigger触发器:
CREATE TRIGGER playlistInputDelete_trigger
AFTER INSERT
ON playlistInput
FOR EACH ROW
EXECUTE PROCEDURE playlistInputAdd(playlistID, 1);
错误信息:
ERROR: function playlistinputadd() does not exist
提前谢谢!
必须使用空参数列表和 RETURNS trigger
定义触发函数。这是导致您收到错误的参数列表。
您可以将参数传递给CREATE TRIGGER
中的函数(即使参数列表必须为空),但这些参数必须是常量并且可以访问通过函数体中的 TG_ARGV
。
您不需要将修改后的 table 的列作为参数传递:插入的行在触发器主体的 NEW
变量中可用。
有关更多信息,请参阅 the documentation。
我现在正在为学校编写脚本,遇到了一个我无法修复的奇怪错误。 所以我有一个播放列表、曲目和一个播放列表输入 table。 我的任务是创建一个触发器,如果我 add/delete 曲目到我的播放列表,amountOfTracks 变量应该是 increased/decreased.
所以现在是奇怪的错误: 我创建了一个函数 "playlistInputAdd",它在执行 "select playlistInputAdd(1,1)" 时已经有效。 问题是,如果我创建我的触发器,它会说这个函数不存在。我看到有人问过同样的问题,但他没有添加参数,而我确实添加了。
playlistInputAdd函数:
CREATE FUNCTION playlistInputAdd(ID int, Amount int)
RETURNS VOID
AS $$
BEGIN
UPDATE playlist
SET amountOfTracks = amountOfTracks + Amount
WHERE playListID = ID;
END;
$$ LANGUAGE plpgsql;
playlistInputAdd_trigger触发器:
CREATE TRIGGER playlistInputAdd_trigger
AFTER INSERT
ON playlistInput
FOR EACH ROW
EXECUTE PROCEDURE playlistInputAdd(playlistID, 1);
playlistInputDelete_trigger触发器:
CREATE TRIGGER playlistInputDelete_trigger
AFTER INSERT
ON playlistInput
FOR EACH ROW
EXECUTE PROCEDURE playlistInputAdd(playlistID, 1);
错误信息:
ERROR: function playlistinputadd() does not exist
提前谢谢!
必须使用空参数列表和 RETURNS trigger
定义触发函数。这是导致您收到错误的参数列表。
您可以将参数传递给CREATE TRIGGER
中的函数(即使参数列表必须为空),但这些参数必须是常量并且可以访问通过函数体中的 TG_ARGV
。
您不需要将修改后的 table 的列作为参数传递:插入的行在触发器主体的 NEW
变量中可用。
有关更多信息,请参阅 the documentation。