2014-08-29 105 views
0

我需要一種方法來臨時存儲和使用從Oracle查詢返回的多個值。在SQL Server中,我將我的值存儲在臨時表中,完成了我的工作,然後刪除了表。我發現甲骨文的等價物並不是那麼明顯。在Oracle中臨時存儲多個值

這裏是我想要做一個SQL Server實例:

select id into #temp from SomeTable where SomeColumn = 'Some Value' 
    : 
(do whatever I need to do with #temp data) 
    : 
drop table #temp 

我可以代碼我周圍的SQL Server的方式非常好,但我幾乎無言以對,當涉及到Oracle的語法。我一直在閱讀各種Oracle參考資料,但他們一直沒有太大的幫助。我讀過Oracle臨時表的工作方式與SQL不同,通常不推薦。

我正在研究臨時表路由,但是如果有更好的方法來做到這一點,不使用臨時表,我都是耳朵。任何人都知道在Oracle中做到這一點的更好方法?

在此先感謝。

+3

使用集合。 – 2014-08-29 21:48:49

+1

你在你的程序中用'#temp'做什麼,爲什麼你暫時實現數據?這將影響如何最好地翻譯你的代碼。例如,請參閱http://dba.stackexchange.com/questions/34279/temporary-table-inside-procedure-oracle/34322#34322 – 2014-08-29 22:27:17

+0

長話短說:我需要交換列中的值。例如,我在SomeColumn中賦值SomeValue1和SomeValue2。我需要將SomeValue1換成SomeValue2,反之亦然。我需要#temp值(我實際上有兩個)來跟蹤哪些ID存儲什麼值。 – 2014-09-02 14:10:47

回答

1

與許多事情一樣,這取決於。這取決於您要檢索多少數據以及您想如何使用它。如果你沒有太多的數據來處理(「太多」的含義,噢,比方說,超過幾千行),你想要程序操作數據,例如在PL/SQL過程或腳本中,以及你不想使用DML訪問它,也就是說,你不想說像SELECT * FROM your_temp_data...那樣的東西,比將數據加載到PL/SQL集合中,就像上面提到的@EgorSkriptunoff可能是一個可行的解決方案。但是,如果臨時數據很大(超過幾千行),並且/或者您需要能夠執行類似SELECT * FROM your_temp_data...的操作,那麼您最好使用Oracle的全局臨時表。 GTT是一個用於保存數據的表格,只要單個事務或完整的會話(即只要您連接到數據庫)就可以保存數據。 Documentation herehere,以及另一個here

分享和享受。