Postgres触发语法

时间:2014-04-19 02:22:55

标签: postgresql jdbc triggers plpgsql

使用SQLFiddle,PostgreSQL 9.3.1。

我正在学习在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":

2 个答案:

答案 0 :(得分:1)

由于Database Function giving an error - Postgresql

,我已经解决了这个问题

似乎只是更改Scheme Window底部的查询终止符解决了这个问题。

答案 1 :(得分:0)

如果您复制粘贴代码,那么您会遇到一个简单的语法错误:ENDl应该是函数定义的最后一行中的END;

否则,它对我来说很好。