2015-09-28 32 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語句?) –

相關問題