用if if else构造的Sql触发器

时间:2013-04-25 06:51:50

标签: sql postgresql

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行中遇到语法错误 什么可能是错的?

2 个答案:

答案 0 :(得分:5)

你写的是ESLE而不是ELSE .... 您的新查询应如下所示:

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;
ELSE
    UPDATE markers SET statusId=4;
    RETURN NEW;
END IF;
END;
$$
LANGUAGE plpgsql;

答案 1 :(得分:4)

或者,使用"simple" CASE一个UPDATE命令,更简单,更快捷:

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。