在 "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

A quick SQLfiddle to test with.