[英]Creating my first trigger in Postgresql with syntax error near “LANGUAGE”
I need to learn more about postgres but I am trying to write a function that links to a trigger in my postgres db. 我需要了解有关postgres的更多信息,但是我正在尝试编写一个链接到postgres db中的触发器的函数。 Normally the functions I write work fine, however, this particular function keeps returning errors around the syntax at the end of my output.
通常,我编写的函数可以正常工作,但是,此特定函数使输出末尾的语法始终返回错误。
I have a fixtures table with a column called 'Result'. 我有一个带有“结果”列的灯具表。 I want to read the scores from the fixture eg Wolves 0:0 Ipswich, and trigger into Result 'Draw'.
我想从固定装置中读取比分,例如狼0:0伊普斯维奇,然后触发结果“平局”。
The query I am writing is as follows: 我正在编写的查询如下:
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();
I have only written basic functions before but I am really struggling with getting this trigger to work. 我以前只写过基本功能,但是我真的很难使这个触发器起作用。
You seem to be using IF
when you mean ELSIF
. 您的意思是
ELSIF
时似乎正在使用IF
。 This version compiles; 该版本编译;
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.