2014-08-29 75 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

分享和享受。