【问题标题】:Temporarily storing multiple values in Oracle [duplicate]在Oracle中临时存储多个值[重复]
【发布时间】: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 存储了哪些值。
  • 我读了一些关于收藏的文章。这绝对有潜力。
  • 呃。像往常一样,我想太多了(再次!)。我想出了一个不需要临时表或集合的更简单的解决方案。这就是我在星期五下午晚些时候做这件事的结果!至少我学到了一些新东西(在我问这个问题之前,我对收藏并不熟悉)。谢谢大家的帮助!

标签: oracle tsql plsql temporary-objects


【解决方案1】:

与许多事情一样,这取决于。这取决于您将检索多少数据以及您希望如何使用它。如果您没有太多数据可以使用(“太多”的意思,哦,比如说,超过几千行)并且您想以程序方式操作数据,即在 PL/SQL 过程或脚本中,并且您不想使用 DML 访问它,即您不想说 SELECT * FROM your_temp_data... 之类的东西,而不是像上面提到的 @EgorSkriptunoff 提到的将数据加载到 PL/SQL 集合中,这可能是一个可行的解决方案。

但是,如果临时数据很大(超过几千行)和/或您需要能够执行SELECT * FROM your_temp_data... 之类的操作,那么最好使用 Oracle 的全局临时表。 GTT 是一个用于保存数据的表,这些数据只能持续与单个事务或完整会话一样长(即,只要您连接到数据库)。 Documentation herehere,以及关于它们的另一篇文章 here

分享和享受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多