如何在全局临时表上提交时删除之前执行sql

时间:2015-03-18 16:34:50

标签: sql oracle plsql

上下文:应用程序正在处理不同的文件,并通过单个插入为每个文件插入大量行(无法更改)。它在每个处理过的文件后提交(不应更改)。

任务:“处理某事”与处理一个文件所创建的所有行的总和,这意味着从最后一次提交到实际提交所创建的所有行。这可能就像是insert into sum_table select sum(a), sum(b), id from gtt_work_table group by id(每个已处理文件的聚合值)一样简单。

解决方案的第一个想法非常简单:使用global temporary table创建on commit delete rows并执行before delete触发器(几乎)执行我喜欢的每个事务的数据。

但它没有用。如此处DELETE TRIGGER ON GTT所述,触发器只会触发显式删除,而不会触发由提交引起的隐式删除。虽然,引用说的是Oracle 8所以:现在有没有办法在GTT清空之前执行sql / plsql?

对每行使用insert /触发器一般都可以工作,但由于保持单行级别而无法帮助我。在提交之前让应用程序执行某些操作(即明确地从gtt中删除)是不可能的,因为它在那时是不可自定义的。

0 个答案:

没有答案