在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中临时存储多个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 ORACLE 中的 WHERE 中传递多值 [重复]

oracle 查询所有字段,某字段重复只显示一条

并行执行 oracle PL/SQL [重复]

sql中如何使一列中的多个重复数据只显示一次, 求大神指导,使得图中的班简名重复的只显示一次。

如何拆分字符串并将其存储在临时变量中[重复]

整行不匹配时的oracle合并语句[重复]