2013-04-25 3 views
2

Thera спусков в PostgreSQL 8.4:Sql триггер с, если потом еще строительство

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 линии.
Что может быть неправильным?

+1

+1 для чрезвычайно смешного вопроса – skytz

+0

@skytz: Ваши слова заставляют меня обидеть. ( –

+0

это случается с лучшими из нас – skytz

ответ

5

Вы написали есло вместо 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; 
+0

Да, ошибка. Но теперь я получаю ошибку в следующей строке. –

+0

Хорошо, я нашел ошибку: 'ELSE IF -> ELSIF'. –

4

Или, проще и быстрее в вашем случае с одним UPDATE команды с помощью "simple" 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.

+0

Этот код выглядит очень красиво. –

Смежные вопросы