2014-04-19 133 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;改變我仍然得到相同的錯誤。 –