触发器可以在 "after statement" 中执行 SELECT 并在复合触发器上查看新值吗?
Can a trigger do a SELECT and see new values on a compound trigger, in "after statement"?
我有一个 table t1,有两列 t1c1 和 t1c2,
如果在 t1c1 或 t1c2 上进行了更新,我需要计算一个值并在另一个 table t2 上更新该值(计算期间未使用)
这个计算需要一些tables,包括t1(因为t1c1或t1c2的更新可以改变值,如果你喜欢的话,它们是计算的参数......)
问题是,在 t1 上执行 SELECT 会导致 "mutation table error",因为 t1 是 "event"。
我可以使用 "PRAGMA AUTONOMOUS_TRANSACTION" 但是,我必须在触发器中使用 "commit" 所以如果回滚,它不会回滚我的触发器操作......
并且看不到更新的行导致计算错误......
我可以使用 "compound trigger",添加使用 "after each row" 的变量数据,然后在 "after statement" 中进行计算吗?
我可以在 "after statement" 中看到更新还是只看到提交的内容?
如果回滚修改 t1c1 或 t1c2,我可以不在 "after statement" 中提交吗?
非常感谢你,对不起我的英语....
在语句级触发器(即具有 "for each row" 的触发器)中,将您的键级信息添加到 PL/SQL 数组。我通常会创建一个包来保存这样的 PL/SQL 数组,其中包含可以轻松添加行等的函数。
- 然后在 "after statement" 中(不是每一行)遍历 PL/SQL 数组并做任何你想做的事——这里没有限制。完成后,重置 PL/SQL 数组,使其为空以备下次使用。
我有一个 table t1,有两列 t1c1 和 t1c2, 如果在 t1c1 或 t1c2 上进行了更新,我需要计算一个值并在另一个 table t2 上更新该值(计算期间未使用) 这个计算需要一些tables,包括t1(因为t1c1或t1c2的更新可以改变值,如果你喜欢的话,它们是计算的参数......) 问题是,在 t1 上执行 SELECT 会导致 "mutation table error",因为 t1 是 "event"。 我可以使用 "PRAGMA AUTONOMOUS_TRANSACTION" 但是,我必须在触发器中使用 "commit" 所以如果回滚,它不会回滚我的触发器操作...... 并且看不到更新的行导致计算错误...... 我可以使用 "compound trigger",添加使用 "after each row" 的变量数据,然后在 "after statement" 中进行计算吗? 我可以在 "after statement" 中看到更新还是只看到提交的内容? 如果回滚修改 t1c1 或 t1c2,我可以不在 "after statement" 中提交吗?
非常感谢你,对不起我的英语....
在语句级触发器(即具有 "for each row" 的触发器)中,将您的键级信息添加到 PL/SQL 数组。我通常会创建一个包来保存这样的 PL/SQL 数组,其中包含可以轻松添加行等的函数。
- 然后在 "after statement" 中(不是每一行)遍历 PL/SQL 数组并做任何你想做的事——这里没有限制。完成后,重置 PL/SQL 数组,使其为空以备下次使用。