我有这种形式的触发器:

CREATE TRIGGER TBP701_UPDATE
AFTER UPDATE ON TBP701 
REFERENCING OLD AS OLD_ROW 
NEW AS NEW_ROW 
FOR EACH ROW 
MODE DB2SQL 
INSERT INTO TBP702 ( ID , IRN , EVENT , OLDVALUES , NEWVALUES , USER , ENTRYTIME ) 
VALUES ( DEFAULT , NEW_ROW . COLUMN1 , 'BUYBACK_ADD' , 
'{"column1":"' CONCAT OLD_ROW . COLUMN1 CONCAT '","column2":"' CONCAT OLD_ROW . COLUMN2 CONCAT '","column3":"' CONCAT OLD_ROW . COLUMN3 CONCAT '"}' ,
'{"column1":"' CONCAT NEW_ROW . COLUMN1 CONCAT '","column2":"' CONCAT NEW_ROW . COLUMN2 CONCAT '","column3":"' CONCAT NEW_ROW . COLUMN3 CONCAT '"}' ,
USER , CURRENT_TIMESTAMP ) ;

我需要将tbp701中的旧值和新值以json格式插入到新表中。 在上面的查询中,我对JSON字符串进行了硬编码。 但我需要在100多个表上编写此类触发器。 所以我需要一个可以接受以下两个参数的sql函数

  1. 来自触发器的NEW_ROW / OLD_ROW参考和
  2. 表名

它应该向我返回JSON字符串,其中包含触发了触发器的特定表和行的所有列。 然后,我可以为所有触发器重用该功能。

我是db2概念中这种高级功能的新手。 因此,描述性的答案将受到高度赞赏。

谢谢。

===============>>#1 票数:0

采用这种设计将是一个严重的错误。

创建整个第二个模式以JSON格式保存关系数据将是一个巨大的噩梦。 确保一致性(即通过这些触发器)将增加大量开销。

为什么不让您的应用程序层解析关系数据并将其以JSON格式放置?

或者,您也可以考虑以XML格式存储数据(并利用DB2中的pureXML功能)。 一篇关于该主题的developerWorks文章

  ask by rearden translate from so

未解决问题?本站智能推荐: