2016-11-02 133 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)) 
)