2016-11-02 170 views
1

我有兩個觸發器對於有着相同功能的表觸發器的存儲過程。記錄被插入到表中或者被更新,並且其一些字段被插入到另一個表中,或者被插入到相同的表中。如果它是新記錄,則觸發插入觸發器。如果它是已經存在的記錄,則觸發更新觸發器。上插入或更新觸發器

這不是火箭科學。

不過,我招待通過使他們每個人的調用存儲過程將複製上述功能簡化這些觸發器的想法。我要走這條路線,因爲我正在使用的單獨表格不允許After Insert Trigger以其包含的代碼的方式使用,並且我希望找到解決方法。我不確定它是否會起作用,但我想嘗試一下。

我不知道如何去做,雖然。我利用填充了來自表的數據加入到觸發器的變量,並且在整個觸發器中使用N.fieldO.field。如果觸發器調用Proc,這可能嗎?如果它被稱爲For Each Row,那麼可以在Proc中使用新字段和舊字段嗎?如果是這樣,怎麼樣?有關存儲過程的輸入和輸出參數對我來說是新的。我甚至不知道我所要求的是如同我腦海中所寫的那樣寫出了多少意義。

比如,我們會說,我有一個叫做汽車表工作。

ID |VIN |CATEGORY 
---------------------------------------------- 
1 A1234 A 
2 A1235 A 
3 B1234 B 

如果一個記錄插入到汽車的CARS.VIN第一個字符應該插入CARS.CATEGORY。如果記錄更新,則CARS.CATEGORY也應該引用N.VIN。我爲每個這些觸發器,他們工作得很好。

的細枝末節的「爲什麼」之外,是有可能包含這些觸發器進,要麼可以調用一個Proc的功能?我將如何介紹Proc的創建初始步驟?

+1

任何理由,你爲什麼不想使用生成的(計算)列? – mustaccio

+0

恐怕你不得不啓發我這是什麼。 – Eiketsu

+0

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.dbobj.doc/doc/c0020109.html – mustaccio

回答

0

而不是使用一個觸發的,考慮定義CATEGORYgenerated column,例如

CREATE TABLE cars (
    id  INT GENERATED ALWAYS AS IDENTITY, 
    vin  VARCHAR(17), 
    category CHAR(1) GENERATED ALWAYS AS (LEFT(vin, 1)) 
)