2012-12-28 63 views
0

我在PostgreSQL和MySQL下面的觸發器都有問題。第3行存在錯誤等。應該創建一個觸發器,根據講座的小時數增加教授的薪水。PostgreSQL觸發器來計算薪水

create create trigger viellehre after insert on Vorlesungen referencing new as vo_neu foreach row when group by vo_neu.gelesenvon 
having sum(Vorlesungen.SWS) > 5 and 
sum(Vorlesungen.SWS) - vo_neu.SWS <= 5 
update Professoren 
set Professoren.gehalt = Professoren.gehalt * 1.05 
where Professoren.PersNr = vo_neu.gelesenvon; 
+2

這不是PostgreSQL的語法,檢查手冊,並創建一個觸發器功能做的伎倆。 –

+0

插入Vorlesungen後創建觸發獎金....引用不工作在Postgre上? (vorlesungen.SWS)> 5且總和(Vorlesungen.SWS) - vo_neu.SWS <= 5更新時,每一行由vo_neu.gelesenvon組成的集合professoren.gehalt = Professoren.gehalt * 1.05其中Professoren.PersNr = vo_neu .gelesenvon;使用having子句在postgre下進行分組時,正確的語法如何? – viv1d

+0

我從來沒有見過在WHEN子句中用group/by定義的觸發器。在Oracle中這不合法,我懷疑它在Postgres中是合法的。您試圖實現的邏輯看起來不適合使用觸發器進行處理,這在任何情況下都會導致系統難以調試。它看起來應該在應用程序代碼中進行。 –

回答

1

你不能有這樣的觸發器定義:

此外,觸發器定義中可以指定一個布爾WHEN條件,這將是測試,看觸發器是否應該被解僱。在行級觸發器中,WHEN條件可以檢查行的舊列和/或新列值。語句級觸發器也可以有WHEN條件,儘管該特性對他們來說不是很有用,因爲條件不能引用表中的任何值。

http://www.postgresql.org/docs/9.2/static/sql-createtrigger.html