0

我有这种形式的触发器:

创建触发器 TBP701_UPDATE
TBP701 更新后
将旧引用为 OLD_ROW
新作为 NEW_ROW
每一行
模式 DB2SQL
插入 TBP702(ID、IRN、事件、旧值、新值、用户、进入时间)
值(默认值,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 '"}' ,
用户,CURRENT_TIMESTAMP);

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

  1. 来自触发器的 NEW_ROW/OLD_ROW 引用和
  2. 表名

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

我是 db2 概念中这些高级特性的新手。所以一个描述性的答案将不胜感激。

谢谢。

4

1 回答 1

0

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

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

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

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

于 2013-04-16T19:35:36.833 回答