通过db2函数从db2触发器获取整个表行的json字符串

通过db2函数从db2触发器获取整个表行的json字符串,json,function,triggers,db2,Json,Function,Triggers,Db2,我有一个这种形式的触发器: 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 .

我有一个这种形式的触发器:

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_更新 更新TBP701后 将旧行引用为旧行 像新的一样新 每行 模式DB2SQL 插入TBP702(ID、IRN、事件、旧值、新值、用户、入口时间) 值(默认值,新行.COLUMN1,“回购\u添加”, “{”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'”, 用户,当前_时间戳); 我需要tbp701中的旧值和新值以json格式插入到新表中。在上面的查询中,我硬编码了JSON字符串;但我需要在100个表上编写这样的触发器。所以我需要一个sql函数,它可以接受以下两个参数

  • 来自触发器的新行/旧行引用,以及
  • 表名
  • 它应该返回json字符串以及触发触发器的特定表和行的所有列。然后,我可以对所有触发器重用该函数

    我是db2概念中此类高级特性的新手。因此,如果能给出描述性的答案,我们将不胜感激


    谢谢。

    采用这种设计将是一个可怕的错误

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

    为什么不让应用程序层解析关系数据并将其转换为JSON格式

    P>可选地,您也可以考虑以XML格式存储数据(并利用DB2中的PURE XML特性)。关于这个话题有一个很好的解释