在Oracle中临时存储多个值[重复]
Posted
技术标签:
【中文标题】在Oracle中临时存储多个值[重复]【英文标题】:Temporarily storing multiple values in Oracle [duplicate] 【发布时间】:2014-08-29 21:42:36 【问题描述】:我需要一种方法来临时存储和使用从 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 中执行此操作的更好方法吗?
提前致谢。
【问题讨论】:
你在你的过程中用#temp
做什么,你为什么要临时实现数据?这将影响如何最好地翻译您的代码。例如,请参阅dba.stackexchange.com/questions/34279/…
长话短说:我需要交换列中的值。例如,我在 SomeColumn 中有值 SomeValue1 和 SomeValue2。我需要将 SomeValue1 换成 SomeValue2 ,反之亦然。我需要 #temp 值(我实际上有两个)来跟踪哪些 ID 存储了哪些值。
我读了一些关于收藏的文章。这绝对有潜力。
呃。像往常一样,我想太多了(再次!)。我想出了一个不需要临时表或集合的更简单的解决方案。这就是我在星期五下午晚些时候做这件事的结果!至少我学到了一些新东西(在我问这个问题之前,我对收藏并不熟悉)。谢谢大家的帮助!
【参考方案1】:
与许多事情一样,这取决于。这取决于您将检索多少数据以及您希望如何使用它。如果您没有太多数据可以使用(“太多”的意思,哦,比如说,超过几千行)并且您想以程序方式操作数据,即在 PL/SQL 过程或脚本中,并且您不想使用 DML 访问它,即您不想说 SELECT * FROM your_temp_data...
之类的东西,而不是像上面提到的 @EgorSkriptunoff 提到的将数据加载到 PL/SQL 集合中,这可能是一个可行的解决方案。
但是,如果临时数据很大(超过几千行)和/或您需要能够执行SELECT * FROM your_temp_data...
之类的操作,那么最好使用 Oracle 的全局临时表。 GTT 是一个用于保存数据的表,这些数据只能持续与单个事务或完整会话一样长(即,只要您连接到数据库)。 Documentation here 和 here,以及关于它们的另一篇文章 here。
分享和享受。
【讨论】:
以上是关于在Oracle中临时存储多个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章