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

你写的是 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 回答
5

UPDATE或者,在您的情况下,使用“简单”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 回答