语法错误在或附近;

时间:2014-03-20 07:53:59

标签: postgresql plpgsql postgresql-9.3

我有很多触发器功能,对于某些人来说有一个奇怪的错误:“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语法的一些文档,但是没有任何乐趣,而分号使得错误对谷歌不友好。

那么我的语法哪个部分是错的,以及如何纠正它?

2 个答案:

答案 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;