2015-09-28 23 views
0

我正在寻找一种方式来使用我的全局临时表的多个过程调用......一些背景:使用多个程序相同GTT交易要求

全局临时表拥有ID的列表。它使用on commit delete rows;子句创建。

我的包体具有1个功能和5-10个过程。我的第一次迭代中有6-11功能,直到我发现我不能返回游标,然后将其推入另一个函数等等等等...

所以程序将标识保存到GTT,每一道工序具有非常不同的逻辑,不能在单个查询中干净地完成。

我的问题是过程调用之间跳转(所有的程序都从第一函数中调用)时,交易似乎以某种方式得到延续和GTT被刷新。

我可以用一个常规表,并在开始和每个调用该函数的结束树干上表,但必须有一个更好的办法。

有什么建议吗?

+0

必须在某处发生'commit'或'rollback'。 – GriffeyDog

+1

要么是提交正在发生,要么是实际使用多个会话(你不会详细说明如何调用这些多个过程,使用连接池?) – tbone

回答

0

你必须在那里有一个提交。

当然,您可以修改表以在提交时保留行。然后你可以自己清除行,或者在会话结束时清除它们。

+0

edit;格式化的道歉。没有提交。我检查了很多次。 '过程do_something作为 开始 插入件插入GTT SELECT * FROM等; 结束do_something' 我'在提交删除行;'在GTT的结束,但没有在任何地方我曾经承诺。这是我知道如何做到这一点或结束交易的方式。试图找出如何保留事务现在 – Qbert

+0

如果您修改GTT以保留提交时的行,那么如果您仍然遇到此问题,那是因为您正在连接作为不同的会话 - 如果问题消失,它可能是Oracle错误或隐式提交(代码中的任何DDL语句?) –

相关问题