在 "LANGUAGE" 附近使用语法错误在 Postgresql 中创建我的第一个触发器
Creating my first trigger in Postgresql with syntax error near "LANGUAGE"
我需要了解有关 postgres 的更多信息,但我正在尝试编写一个链接到我的 postgres 数据库中的触发器的函数。通常我编写的函数工作正常,但是,这个特定的函数在我的输出末尾不断返回围绕语法的错误。
我有一个固定装置 table,其中有一列名为 'Result'。我想从夹具中读取分数,例如狼队 0:0 伊普斯维奇,触发结果 'Draw'.
我写的查询如下:
CREATE OR REPLACE FUNCTION sppullscoretrigger()
RETURNS trigger
SECURITY DEFINER
AS $BODY$
DECLARE
payload text;
BEGIN
SELECT NEW.Home_Side_Score, NEW.Away_Side_Score FROM Fixtures;
IF NEW.Home_Side_Score is NULL or NEW.Away_Side_Score is NULL THEN NEW.Result = 'TBC';
IF NEW.Home_Side_Score = NEW.Away_Side_Score THEN NEW.Result = 'Draw';
IF NEW.Home_Side_Score > NEW.Away_Side_Score THEN NEW.Result = 'Home_Win';
IF NEW.Home_Side_Score < NEW.Away_Side_Score THEN NEW.Result = 'Away_Win';
ELSE NEW.Result = 'Error';
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql
CREATE TRIGGER trgscore
BEFORE INSERT OR UPDATE
ON Fixtures
FOR EACH ROW
EXECUTE PROCEDURE sppullscoretrigger();
我以前只写过基本功能,但我真的很难让这个触发器工作。
当你说 ELSIF
时,你似乎在使用 IF
。此版本编译;
CREATE OR REPLACE FUNCTION sppullscoretrigger()
RETURNS trigger
SECURITY DEFINER
AS $BODY$
DECLARE
payload text;
BEGIN
SELECT NEW.Home_Side_Score, NEW.Away_Side_Score FROM Fixtures;
IF NEW.Home_Side_Score is NULL or NEW.Away_Side_Score is NULL THEN NEW.Result = 'TBC';
ELSIF NEW.Home_Side_Score = NEW.Away_Side_Score THEN NEW.Result = 'Draw';
ELSIF NEW.Home_Side_Score > NEW.Away_Side_Score THEN NEW.Result = 'Home_Win';
ELSIF NEW.Home_Side_Score < NEW.Away_Side_Score THEN NEW.Result = 'Away_Win';
ELSE NEW.Result = 'Error';
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql
我需要了解有关 postgres 的更多信息,但我正在尝试编写一个链接到我的 postgres 数据库中的触发器的函数。通常我编写的函数工作正常,但是,这个特定的函数在我的输出末尾不断返回围绕语法的错误。
我有一个固定装置 table,其中有一列名为 'Result'。我想从夹具中读取分数,例如狼队 0:0 伊普斯维奇,触发结果 'Draw'.
我写的查询如下:
CREATE OR REPLACE FUNCTION sppullscoretrigger()
RETURNS trigger
SECURITY DEFINER
AS $BODY$
DECLARE
payload text;
BEGIN
SELECT NEW.Home_Side_Score, NEW.Away_Side_Score FROM Fixtures;
IF NEW.Home_Side_Score is NULL or NEW.Away_Side_Score is NULL THEN NEW.Result = 'TBC';
IF NEW.Home_Side_Score = NEW.Away_Side_Score THEN NEW.Result = 'Draw';
IF NEW.Home_Side_Score > NEW.Away_Side_Score THEN NEW.Result = 'Home_Win';
IF NEW.Home_Side_Score < NEW.Away_Side_Score THEN NEW.Result = 'Away_Win';
ELSE NEW.Result = 'Error';
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql
CREATE TRIGGER trgscore
BEFORE INSERT OR UPDATE
ON Fixtures
FOR EACH ROW
EXECUTE PROCEDURE sppullscoretrigger();
我以前只写过基本功能,但我真的很难让这个触发器工作。
当你说 ELSIF
时,你似乎在使用 IF
。此版本编译;
CREATE OR REPLACE FUNCTION sppullscoretrigger()
RETURNS trigger
SECURITY DEFINER
AS $BODY$
DECLARE
payload text;
BEGIN
SELECT NEW.Home_Side_Score, NEW.Away_Side_Score FROM Fixtures;
IF NEW.Home_Side_Score is NULL or NEW.Away_Side_Score is NULL THEN NEW.Result = 'TBC';
ELSIF NEW.Home_Side_Score = NEW.Away_Side_Score THEN NEW.Result = 'Draw';
ELSIF NEW.Home_Side_Score > NEW.Away_Side_Score THEN NEW.Result = 'Home_Win';
ELSIF NEW.Home_Side_Score < NEW.Away_Side_Score THEN NEW.Result = 'Away_Win';
ELSE NEW.Result = 'Error';
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql