2012-02-27 70 views
3

簡短的問題,因爲我不知道如何搜索這個。我可以「重新更新」同一行嗎?例如,我有一個存儲付款小計的字段,並且考慮到我的業務限制,我可以更新該值。我能用觸發器更新同一行的總數嗎?事先謝謝!在觸發器中更新oracle中的同一行?

順便說一下,我使用Oracle和PL/SQL。

業務規則:我有以下幾點。有一張表,商店將支付數據,另一張表存儲每月支付的費用,另一張表存儲可能的折扣。一次支付只能打折一次,而且會支付商店的小計和總額。所以,我正在做的是...「當折扣信息正在更新時,在提交之後,更新總價值和費用值。」

回答

4

無法更新您的觸發射擊對陣表,你會得到一個ORA-04091變異表錯誤。只要它是'before'觸發器,您就可以使用:NEW語法更新行本身的值。

雖然我不清楚你對小計的意思,這聽起來像你在桌上有一個運行的總場;如果那是基於同一張桌子上的其他記錄(例如,您對同一訂單有多個記錄,並且您希望插入的記錄具有所有先前記錄的總和)。如果是這種情況,那麼你也不能這樣做,因爲你會碰到相同的ORA-04901。

如果你是連續更新那麼你可以通過設置例如:NEW.subtotal := :OLD.subtotal - :OLD.value + :NEW.value來調整一個字段,但不知道該字段的好處是什麼。

這將有助於瞭解你的業務邏輯以及它是如何與插入/更新,並且要觸發做什麼結合使用。通常對於這樣的事情,你真的想在插入/更新時使用包裝程序,而不是觸發器,但目前它有點模糊。

的小計,以保持準確,我可能會避免試圖保持這一切,而是使用具有解析函數計算它爲您的視圖。根據我的經驗,更少麻煩。

+0

我更新了我原來的帖子。 – 2012-02-27 15:28:30

+0

@ user1231958 - 我一定會看看存儲過程來做到這一點。可能在提交之前進行更新,以避免同時發生更新的風險。 – 2012-02-27 15:31:29

+0

如果由於某種原因某人遇到了SQL * Plus控制檯或類似的東西,並以錯誤的方式插入/更新數據會導致所有事情都搞亂,該怎麼辦? – 2012-02-27 15:34:05

1

是 - 一個BEFORE INSERT for each row觸發器可以修改插入值。

+0

如果我正在使用'插入每行之後'怎麼辦? – 2012-02-27 15:16:20

+0

這就是INSERT完成後 - 您插入後不能更改行, – 2012-02-27 15:23:52

+0

我使用業務規則更新了帖子。 – 2012-02-27 15:28:48