2013-03-26 63 views
-2

這是在銷售物品時觸發器更改庫存表的語法是否正確?銷售物品時觸發改變庫存表

create trigger tr_stockquant 
on tbl_ticket for insert, update, delete as $$ 
begin 
update s set stockQty = s.stockQty - isnull(i.Qty,0) + isnull(d.Qty,0) 
from tbl_stock s 
left join inserted i 
on s.itemID = i.itemID 
left join deleted d on itemID = s.itemID 
end; 
$$ language plpgsql; 
+0

問題通常在其中有一個'?'。 – 2013-03-26 15:00:00

+0

我理解你的問題,但我無法理解你的代碼。請轉換爲代碼塊並添加適當的換行符(通過在每個換行符後添加四個空格使其成爲代碼塊)。另外,你應該測試它。它做你想做的事嗎?如果沒有,那麼你可以回來。告訴我們你想要它做什麼以及它實際上做了什麼,我們可能會更好地幫助你。 – 2013-03-26 15:06:15

+0

當通過psql運行時,我收到錯誤語法附近的線我試圖更新庫存數量表,當一個項目從售票表出售時 – 2013-03-26 15:09:45

回答

0

你將需要先創建一個適當的功能,然後堅持語法和CREATE TRIGGER聲明的語義。

因此首先要創建一個函數:

CREATE FUNCTION alter_stock_table() RETURNS TRIGGER AS $$ 
    BEGIN 
     IF tg_op = 'INSERT' THEN 
      ... 
     ELSIF tg_op = 'UPDATE' THEN 
      ... 
     ELSIF tg_op = 'DELETE' THEN 
      ... 
     ENDIF 
$$ LANGUAGE PLPGSQL; 

然後你就可以創建一個觸發器:

CREATE TRIGGER alter_stock_table_trigger 
    AFTER INSERT, UPDATE, DELETE ON tbl_ticket 
    FOR EACH ROW 
    EXECUTE PROCEDURE alter_stock_table(); 

谷歌將幫助你找到如何定義功能更多的例子。 例如,this page作了簡要介紹。