→ ssccg: temp table是在commit的時候清空,跟connection無關 03/08 20:41
→ ssccg: 你需要的是Transaction 03/08 20:42
→ ssccg: 沒有用transaction時JdbcTemplate每個動作會auto commit 03/08 20:45
抱歉我補充一下
我要insert資料至temp table A 此時會commit
然後再和table B 作join 取出需要的資料
然後A就不需要再用了 當該Connection斷了後 A自動清空 這是DB作的
同一個Connection連線&中斷 都是DB判斷的
謝謝一樓提供的意見!
※ 編輯: aegis105 (114.24.60.237), 03/08/2016 20:56:19
→ ssccg: 忘了問哪種DB,因為你說的像oracle的所以上面是說oracle的 03/08 21:13
→ ssccg: 你table A資料作完就不用了,那為什麼要commit? 03/08 21:13
是oracle沒錯
因為資料筆數非常大量
temp table A的機制是DBA建議&設計的
先將大量資料commit到A 之後和B(資料筆數更多)join 得出結果
不知道是否有回答到您的問題 或是其實有更好作法呢
※ 編輯: aegis105 (114.24.60.237), 03/08/2016 21:29:36
※ 編輯: aegis105 (114.24.60.237), 03/08/2016 21:32:47
→ ssccg: oracle的temp table是在commit(結束transaction時清空) 03/08 21:41
→ ssccg: 所以就是開一個transaction中作完insert、join select 03/08 21:42
→ ssccg: 之後再commit 03/08 21:42
→ ssccg: 我猜你把commit當成insert... 03/08 21:44
疑.. 但我沒有搞混commit和insert
使用的方式和ss大說的有點像又不太一樣
我今天測試的方式:
用一個connection > insert 1筆資料 > commit
> select確實有那一筆
中斷connection > 重新開connection
> select table是空的
有點混亂啊..
※ 編輯: aegis105 (114.24.60.237), 03/08/2016 22:19:44
→ yyc1217: 建立connection的成本蠻大的 如果太頻繁的確會造成影響 03/08 23:04
→ yyc1217: 這也是為什麼有connection pool 用query清空也許比較好 03/08 23:04
→ yyc1217: 或是每次建立不同的temp表 db再用排程刪掉 03/08 23:06
→ adrianshum: Oracle temp table 建立時可指明commit 或connection 03/09 01:10
→ adrianshum: close 時清空。另,因為connection pool 並不會真的c 03/09 01:10
→ adrianshum: lose connection,類似情況下不建議用後者 03/09 01:10
→ ssccg: 我不知道可以設成connection close時清空,不過因為pool的 03/09 02:56
→ ssccg: 關係通常是用commit時清空的用法吧 03/09 02:56
→ ssccg: 如果是connection時清空,在用pool的情況下你只能自己每個 03/09 02:56
→ ssccg: transaction去做trucate了 03/09 02:57
→ ssccg: 只要有用connection pool,上層取到的connection都是wrap過 03/09 02:58
→ ssccg: 的,你close都只是把connection還回pool,不能真的關掉 03/09 02:58
→ ssccg: 可以要求改DB定義的話去換成on commit delete吧 03/09 03:03
推 cug990617: 你可以試著寫一個Procedure,把資料送進去後再處理 03/09 13:23
推 j16598231: 試試用batch? 03/09 21:36
推 kiwatami: temp table可以用stored procedure開 執行完就消失了 03/10 12:02
→ kiwatami: 不需要管連線 要做這種一堆處理的寫在裡面速度會快點 03/10 12:02