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