我有很多触发器功能,对于某些人来说有一个奇怪的错误:“Syntax error at or near ;
”这是我的代码:
CREATE OR REPLACE FUNCTION zajisti_vyplnenost() RETURNS trigger AS $$
BEGIN
IF NEW.typ_vztahu != 1 THEN
RETURN NEW;
END IF;
IF NEW.nad.typ_sj = 1 THEN
IF NEW.nad.vrstva.vypln = true THEN
ELSE
RAISE EXCEPTION 'Totožné stratigrafické jednotky musejí být stejného typu!';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER zajisti_vyplnenost
BEFORE INSERT OR UPDATE ON s_vztah
FOR EACH ROW
EXECUTE PROCEDURE zajisti_vyplnenost();
根据调试器,错误应该在第14行(使用END;
)。我试图找到可能导致问题的东西,但是这个函数看起来像其他不会触发任何错误的函数。我在plpgsql中查看了函数和END语法的一些文档,但是没有任何乐趣,而分号使得错误对谷歌不友好。
那么我的语法哪个部分是错的,以及如何纠正它?
答案 0 :(得分:2)
您似乎忘了一个END IF
:
IF NEW.nad.typ_sj = 1 THEN
IF NEW.nad.vrstva.vypln = true THEN
ELSE
RAISE EXCEPTION 'Totožné stratigrafické jednotky musejí být stejného typu!';
END IF;
END IF;
应该是正确的
答案 1 :(得分:1)
你错过了END IF
:
IF NEW.nad.typ_sj = 1 THEN
IF NEW.nad.vrstva.vypln = true THEN
ELSE
RAISE EXCEPTION 'Totožné stratigrafické jednotky musejí být stejného typu!';
END IF;
END IF;