Postgresql Postgres触发器语法

Postgresql Postgres触发器语法,postgresql,jdbc,triggers,plpgsql,Postgresql,Jdbc,Triggers,Plpgsql,使用SQLFIDLE,PostgreSQL 9.3.1 我正在学习在PostgreSQL中定义触发器,在做了一些研究之后,我发现了以下几点: Postgres中的触发器不同于MYSQL。在Postgres中,您必须创建一个返回触发器的函数,而在MySQL中,您只需创建一个触发器即可。这就是我想到的: 在插入员工时,我们要更新部门总工资 CREATE FUNCTION update_sal() RETURNS TRIGGER AS $$ BEGIN IF NEW.dno IS NOT NULL

使用SQLFIDLE,PostgreSQL 9.3.1

我正在学习在PostgreSQL中定义触发器,在做了一些研究之后,我发现了以下几点:

Postgres中的触发器不同于MYSQL。在Postgres中,您必须创建一个返回触发器的函数,而在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":

如果复制粘贴的代码,则会出现一个简单的语法错误:
ENDl
应该是
END在函数定义的最后一行


否则,我会觉得不错。

多亏了


似乎只要更改Scheme窗口底部的查询终止符就可以解决这个问题

感谢你对克里斯托夫的评论,不过即使是在结尾;改变了我仍然得到同样的错误。。