2014-04-19 102 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;改变我仍然得到相同的错误。 –