我正在努力将临时表(SQL服务器)迁移到oracle



我正在努力将临时表(SQL服务器)迁移到oracle。大多数情况下,oracle 不考虑在存储过程中使用临时表,但在 sql 服务器中,他们使用临时表进行小型获取记录并对其进行操作。 如何克服这个问题。 我也在搜索一些关于将临时表迁移到 oracle 的在线文章,但它们没有清楚地解释我的期望。 我得到了诸如使用内联视图、WITH 子句、引用光标而不是临时表等信息。我完全糊涂了。 请建议我,在这种情况下可以使用内联视图,WITH子句,引用光标。 这可能有助于提高我的知识水平,也有助于做好工作。

一如既往地感谢您在帮助新手方面的宝贵时间。 谢谢 阿尔萨塔姆·侯赛因

像许多问题一样,答案是"视情况而定"。几件事

  1. Oracle的"临时"表称为全局临时表(GTT)。与大多数其他供应商的 TEMP 表不同,它们的定义是全局的。SQL Server(和其他)中的脚本或程序将创建一个临时表,该临时表将在会话结束时消失。这意味着脚本或程序可以由多个用户重新运行或同时运行。但是,这不适用于 GTT,因为 GTT 将在会话结束时保持存在,因此尝试创建 GTT 的下一次运行将失败,因为它已经存在。 因此,一种方法是预先创建 GTT,就像其余的应用程序表一样,然后将程序更改为 INSERT 到 gtt 中,而不是创建它。
  2. 正如其他人所说,使用 CTE 公用表表达式)可能会起作用,购买它首先取决于使用 TEMP 表的动机。临时表的优点之一是它通过一系列步骤提供了一个"检查点",并允许在中间临时数据集上收集统计信息;它是一组复杂的处理。CTE不提供这种福利。

  3. 也可以使用其他"中间"对象,例如集合,但它们必须被"管理",并且并没有真正提供能够收集它们统计数据的任何优势。

因此,正如我在开始时所说,您首先选择解决方案将在一定程度上取决于原始临时表的动机。

相关内容

最新更新