2

Thera は PostgreSQL 8.4 のトリガーです。

 CREATE OR REPLACE FUNCTION updateMarkers()
  RETURNS trigger AS
  $$
  BEGIN
IF NEW.status='Новый' THEN
    UPDATE markers SET statusId=0;
    RETURN NEW;
ELSE IF NEW.status='В работе' THEN
    UPDATE markers SET statusId=2;
    RETURN NEW;
ELSE IF NEW.status='Завершен' THEN
    UPDATE markers SET statusId=3;
    RETURN NEW;
ESLE
    UPDATE markers SET statusId=4;
    RETURN NEW;
END IF;
END;
$$
LANGUAGE plpgsql;

そして、構文エラーが発生しESLEます。
何が間違っている可能性がありますか?

4

2 に答える 2

5

または、「シンプル」UPDATEを使用した1つのコマンドで、あなたのケースではよりシンプルで高速です:CASE

CREATE OR REPLACE FUNCTION updatemarkers()
  RETURNS trigger AS
$$
BEGIN

UPDATE markers
SET    statusid = 
   CASE NEW.status
    WHEN 'Новый'    THEN 0
    WHEN 'В работе' THEN 2;
    WHEN 'Завершен' THEN 3;
    ELSE 4
   END;

RETURN NEW;

END
$$ LANGUAGE plpgsql;

いずれにせよ更新しているので、この単純なフォームは適切です。Postgres 8.4 でも動作します。

于 2013-04-25T12:41:42.643 に答える
5

... の代わりに ESLE を書きました。ELSE新しいクエリは次のようになります。

CREATE OR REPLACE FUNCTION updateMarkers()
  RETURNS trigger AS
  $$
  BEGIN
IF NEW.status='Новый' THEN
    UPDATE markers SET statusId=0;
    RETURN NEW;
ELSEIF NEW.status='В работе' THEN
    UPDATE markers SET statusId=2;
    RETURN NEW;
ELSEIF NEW.status='Завершен' THEN
    UPDATE markers SET statusId=3;
    RETURN NEW;
ELSE
    UPDATE markers SET statusId=4;
    RETURN NEW;
END IF;
END;
$$
LANGUAGE plpgsql;

@edit: ELSE IF 一緒にする必要がある: ELSEIF

于 2013-04-25T06:52:51.617 に答える