我有一个共享相同功能的表的两个触发器。在所述表中插入或更新记录,并将其某些字段插入另一个表或其他位置到同一个表中。如果是新记录,则会触发插入触发器。如果它是已存在的记录,则触发更新触发。
这不是火箭科学。
但是,我很乐意通过让每个触发器调用一个将复制上述功能的存储过程来简化这些触发器。我正在使用这条路由,因为我正在使用的一个单独的表不允许以这种方式使用After Insert Trigger和它包含的代码,我想找到一个解决方法。我不确定它是否会起作用,但我想试一试。
但是,我不知道如何去做。我利用填充了表中数据的变量加入触发器,并在整个触发器中使用N.field
或O.field
。如果Trigger调用Proc,这可能吗?如果它被称为For Each Row,那么可以在Proc中使用New和Old字段吗?如果是这样,怎么样?关于存储过程的输入和输出参数对我来说是新的。我甚至都不知道我所要求的内容是否与我脑子里的内容一样有意义。
例如,我们会说我正在使用名为Cars的表。
ID |VIN |CATEGORY
----------------------------------------------
1 A1234 A
2 A1235 A
3 B1234 B
如果记录已插入汽车,则CARS.VIN
的第一个字符应插入CARS.CATEGORY
。如果记录已更新,则CARS.CATEGORY
也应引用N.VIN
。我有一个触发器,每个都可以正常工作。
除了'为什么'之外的细节,是否可以将这些触发器的功能包含在可以调用的Proc中?我将如何进行所述Proc的创建的初始步骤?
答案 0 :(得分:0)
不要使用触发器,而是考虑将CATEGORY
定义为generated column,例如
CREATE TABLE cars (
id INT GENERATED ALWAYS AS IDENTITY,
vin VARCHAR(17),
category CHAR(1) GENERATED ALWAYS AS ( LEFT( vin, 1 ) )
)