Sql 在Insert或Update触发器上触发存储过程

Sql 在Insert或Update触发器上触发存储过程,sql,stored-procedures,triggers,db2,Sql,Stored Procedures,Triggers,Db2,对于共享相同功能的表,我有两个触发器。记录被插入或更新到所述表中,其某些字段被插入到另一个表中,或插入到同一个表的其他位置。如果是新记录,则会触发Insert触发器。如果它是已存在的记录,则会触发更新触发器 这不是火箭科学 但是,我很乐意通过让每个触发器调用一个存储过程来简化这些触发器,该存储过程将复制上述功能。我之所以这样做,是因为我正在使用的一个单独的表不允许以这种方式将插入后触发器与它包含的代码一起使用,我想找到一种解决方法。我不确定它是否有效,但我想试一试 不过,我不知道该怎么办。我使用

对于共享相同功能的表,我有两个触发器。记录被插入或更新到所述表中,其某些字段被插入到另一个表中,或插入到同一个表的其他位置。如果是新记录,则会触发Insert触发器。如果它是已存在的记录,则会触发更新触发器

这不是火箭科学

但是,我很乐意通过让每个触发器调用一个存储过程来简化这些触发器,该存储过程将复制上述功能。我之所以这样做,是因为我正在使用的一个单独的表不允许以这种方式将插入后触发器与它包含的代码一起使用,我想找到一种解决方法。我不确定它是否有效,但我想试一试

不过,我不知道该怎么办。我使用从连接到触发表的表中填充数据的变量,并在整个触发器中使用
N.field
O.field
。如果触发器调用Proc,这是否可能?如果为每一行调用它,那么新字段和旧字段是否可以在Proc中使用?如果是,怎么做?关于存储过程的输入和输出参数对我来说是新的。我甚至不知道我的要求是否像写在脑海里一样有意义

例如,我们会说我正在使用一个名为Cars的表

ID  |VIN    |CATEGORY
----------------------------------------------
1    A1234   A
2    A1235   A
3    B1234   B
如果将记录插入Cars,则应将
Cars.VIN
的第一个字符插入
Cars.CATEGORY
。如果更新了记录,
CARS.CATEGORY
也应参考
N.VIN
。我对每一个都有一个触发器,它们工作得很好


撇开“为什么”的细节不谈,是否有可能将这些触发器的功能包含到一个可以调用的Proc中?对于PROC?

< P>,我将如何着手创建初始步骤,而不是使用触发器,考虑定义<代码>类别< /代码>,例如,

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

你为什么不想使用生成的(计算的)列?恐怕你得告诉我这是什么。