2014-04-19 3 views
1

Использование SQLFiddle, PostgreSQL 9.3.1.Синтаксис триггера Postgres

Я учусь определить триггеры в PostgreSQL, и после выполнения некоторых исследований я выяснил следующее:

Триггеры в Postgres отличаются от MYSQL. Где в Postgres вы должны создать функцию, которая RETURNS TRIGGER, в MySQL вы можете просто создать триггер. Итак, это то, что я придумал:

В отделении сотрудников мы хотим обновить отдел общей зарплаты.

CREATE FUNCTION update_sal() RETURNS TRIGGER AS $$ 
BEGIN 
    IF NEW.dno IS NOT NULL THEN 
    UPDATE Department SET Total_sal = total_sal + NEW.salary 
    WHERE department.dno = NEW.dno; 
    END IF; 
RETURN NULL; 
END; 
$$ Language plpgsql; 

CREATE TRIGGER updateInsert 
AFTER INSERT ON Employee 
FOR EACH ROW 
EXECUTE PROCEDURE update_sal(); 

И я получаю следующее сообщение об ошибке:

Schema Creation Failed: ERROR: unterminated dollar-quoted string at or near "$$ 
BEGIN IF NEW.dno IS NOT NULL THEN UPDATE Department 
SET Total_sal = total_sal +NEW.salary WHERE department.dno = NEW.dno": 

ответ

1

Я решил вопрос благодаря Database Function giving an error - Postgresql

Это кажется просто изменение терминатора запроса в нижней части окна схемы решает эту проблему.

+0

[Связанный ответ с более подробной информацией и демонстрацией] (http://stackoverflow.com/questions/22747225/exceptions-when-creating-a-trigger-in-postgresql-9-1/22748778#22748778). –

0

Если копировать-вставить код, то у вас есть простой синтаксической ошибки: ENDl должен быть в END; прошлом, но - одна линия определения функции.

В противном случае это выглядит хорошо для меня.

+0

Спасибо за ваш отзыв Christof, однако даже с END; изменено. Я все еще получаю ту же ошибку. –

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