0

我有很多触发功能,其中一些有一个奇怪的错误:“ 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 语法的文档,但没有任何乐趣,而且分号使该错误对 Google 非常不友好。

那么我的语法的哪一部分是错误的,如何纠正呢?

4

2 回答 2

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;

应该是正确的

于 2014-03-20T07:57:10.620 回答
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;
于 2014-03-20T07:57:22.327 回答