【问题标题】:Postgres trigger syntaxPostgres 触发器语法
【发布时间】:2014-04-19 11:32:05
【问题描述】:

使用 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":

【问题讨论】:

    标签: postgresql jdbc triggers plpgsql


    【解决方案1】:

    感谢Database Function giving an error - Postgresql,我已经解决了这个问题

    似乎只需更改方案窗口底部的查询终止符即可解决此问题。

    【解决方案2】:

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

    否则,我觉得很好。

    【讨论】:

    • 感谢您的评论 Christof,但即使是 END;改变了我仍然得到同样的错误。
    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多